【发布时间】: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
我可以将两个列表合并如下:
List(1,2,3) ::: List(4,5,6)
结果是:
res2: List[Int] = List(1, 2, 3, 4, 5, 6)
运算符::: 是右联想,是什么意思?
在数学中,右结合是:
5 + ( 5 - ( 2 * 3 ) )
【问题讨论】:
标签: scala
右关联意味着运算符(在我们的例子中,::: 方法)应用于右操作数,同时使用左操作数作为参数。这意味着实际的方法调用是这样完成的:
List(4,5,6).:::(List(1,2,3))
由于::: 前置列表,结果是List(1,2,3,4,5,6)。
【讨论】:
在最一般的意义上,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 的回答中所述)。
【讨论】: