【问题标题】:How to make a right-associative infix operator?如何制作右结合中缀运算符?
【发布时间】:2013-03-01 08:30:02
【问题描述】:

我有一个关联操作>>。问题是它的成本线性地取决于它的左操作数的大小。所以由>>的一系列n应用形成的表达式就像

a >> a >> a >> a >> a >> ... >> a

它在n 方面具有二次成本,因为默认情况下中缀运算符是left-associative。如何使其具有右关联性,以使此类表达式的成本在 n 方面保持线性?

【问题讨论】:

    标签: scala associative infix-notation


    【解决方案1】:

    我找到了解决方案。 Scala reference6.12.3 中缀操作部分中说:

    运算符的关联性由运算符的最后一个字符决定。运营商 以冒号“:”结尾的是右结合的。所有其他运算符都是左结合的。

    因此,将 >> 重命名为 >>: 就足够了。

    我花了一些时间才意识到,a >> b 被脱糖成 a.>>(b)a >>: b 被脱糖成 b.>>:(a)。所以我不得不将>>: 定义为

    def >>:(x: T): T = x >> this
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-08
      • 2019-02-06
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 2011-11-16
      • 2018-01-24
      • 2021-04-20
      相关资源
      最近更新 更多