Scala:为什么l1::: l2不等于l1.::::(l2)

  • 本文关键字:l1 l2 不等于 Scala list scala
  • 更新时间 :
  • 英文 :


下面是我的代码:

    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)?

:结尾的操作符将被区别对待。当使用中缀表示法时,它们会反转它们的实参——在右边的实参上调用方法,而左边的实参用作形参。所以l1 ::: l2l2.:::(l1)是一样的

Scala有两条规则:
1. :运算符/方法是右结合的。
2. 操作符/方法的结合性由操作符名中的最后一个字符决定。

例如

:
任何具有任意名称但以:

结尾的方法
def myMethod:(a: Any)

被视为:,因此x myMethod: y也是右结合的,并且像y.myMethod:(x)

一样执行。

阅读更多关于Scala编程书:基本类型和操作

最新更新