虽然三重冒号是一个右关联运算符,但以下结果表明它不是真的,是吗?
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))
我是否理解成为正确联想错误的定义?
答案 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前置于此。