【问题标题】:Right associative with operator :与运算符右关联:
【发布时间】:2017-08-30 16:18:49
【问题描述】:

我可以将两个列表合并如下:

List(1,2,3) ::: List(4,5,6)

结果是:

res2: List[Int] = List(1, 2, 3, 4, 5, 6)

运算符::: 是右联想,是什么意思?

在数学中,右结合是:

5 + ( 5 - ( 2 * 3 ) )

【问题讨论】:

标签: scala


【解决方案1】:

右关联意味着运算符(在我们的例子中,::: 方法)应用于右操作数,同时使用左操作数作为参数。这意味着实际的方法调用是这样完成的:

List(4,5,6).:::(List(1,2,3))

由于::: 前置列表,结果是List(1,2,3,4,5,6)

【讨论】:

    【解决方案2】:

    在最一般的意义上,right-associative 的意思是如果你不放任何括号,它们将被假定在右边:

    a ::: b ::: c == a ::: (b ::: c)
    

    而左结合运算符(例如+)会有

    a + b + c == (a + b) + c
    

    但是,根据spec(6.12.3 中缀操作),

    左关联二元运算e1 op e2 被解释为e1.op(e2)。如果 op 是右结合的, 相同的操作被解释为{ val x=e1; e2.op(x ) },其中 x 是一个新名字。

    因此,scala 中的右关联运算符被视为其右操作数的方法,其左操作数作为参数(如 @Yuval 的回答中所述)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多