我可以将两个列表合并在一起:
List(1,2,3) ::: List(4,5,6)
结果是:
res2: List[Int] = List(1, 2, 3, 4, 5, 6)
运算符:::
是正确关联的,这是什么意思?
在数学中,右关联是:
5 + ( 5 - ( 2 * 3 ) )
答案 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的回答中所述)。