与运算符右关联:

时间:2017-04-05 07:29:14

标签: scala

我可以将两个列表合并在一起:

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

结果是:

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

运算符:::是正确关联的,这是什么意思?

在数学中,右关联是:

5 + ( 5 - ( 2 * 3 ) )

2 个答案:

答案 0 :(得分:2)

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

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

由于::: 预先列表,结果为List(1,2,3,4,5,6)

答案 1 :(得分:1)

在最一般意义上,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的回答中所述)。