右关联三重冒号运算符

时间:2013-07-20 07:07:25

标签: scala

虽然三重冒号是一个右关联运算符,但以下结果表明它不是真的,是吗?

List(3, 4, 5) ::: List(18, 19, 20) //> List[Int] = List(3, 4, 5, 18, 19, 20)

从我的观点来看,结果应该是List(18, 19, 20, 3, 4, 5),因为它与说法相同:

List(18, 19, 20).:::(List(3, 4, 5))

我是否理解成为正确联想错误的定义?

2 个答案:

答案 0 :(得分:5)

来自文档:

def :::(prefix: List[A]): List[A]
[use case] Adds the elements of a given list in front of this list.

示例:

List(1, 2) ::: List(3, 4) = List(3, 4).:::(List(1, 2)) = List(1, 2, 3, 4)
prefix  - The list elements to prepend.
returns - a list resulting from the concatenation of the given list prefix and this list.

这就说明了一切。至于右关联操作,你的右边。

答案 1 :(得分:1)

关联性与表达式

无关
x ::: y

:::的关联性决定是否

x ::: y ::: z

被解释为(如果是左关联的)

( x ::: y ) ::: z

或(如果是右关联的)

x ::: ( y ::: z )

因为在Scala中,以冒号结尾的所有运算符都是右关联的,所以使用后一种解释:假设x,y,z是List类型的变量,首先y预先添加到z,然后x前置于此。