这是我的代码:
val l1 = List(1,2,3)
val l2 = List(4,5,6)
val l1l2_1 = l1 ::: l2
val l1l2_2 = l1.:::(l2)
val l1l2_3 = l2.:::(l1)
println(s"l1 = $l1 \nl2 = $l2 \nl1 ::: l2 = $l1l2_1 \nl1.:::(l2) = $l1l2_2 \nl2.:::(l1) = $l1l2_3 }")这是输出:
l1 = List(1, 2, 3)
l2 = List(4, 5, 6)
l1 ::: l2 = List(1, 2, 3, 4, 5, 6)
l1.:::(l2) = List(4, 5, 6, 1, 2, 3)
l2.:::(l1) = List(1, 2, 3, 4, 5, 6) }为什么l1 : l2不等于l1。:(L2)?
发布于 2014-05-22 03:40:53
以:结尾的操作符与其他操作符不同。当与infix符号一起使用时,它们会反转它们的参数--在右边的参数上调用该方法,而左边的参数被用作参数。所以l1 ::: l2和l2.:::(l1)是一样的。
发布于 2014-05-22 07:53:25
原因是Scala中的两条规则:
:算子/方法是正确结合的。例如:
任何具有任意名称但以:结尾的方法
def myMethod:(a: Any)被视为一个:,因此x myMethod: y也是正确的关联,并且执行起来像y.myMethod:(x)。
阅读Scala书中编程的更多内容:基本类型和操作
https://stackoverflow.com/questions/23797396
复制相似问题