【发布时间】:2017-05-29 09:20:19
【问题描述】:
谁能解释一下是怎么回事
scala> List(1,2).:::(List(3,4))
res15: List[Int] = List(3, 4, 1, 2)
scala> List(1,2) ::: List(3,4)
res16: List[Int] = List(1, 2, 3, 4)
如果方法调用结果应该是相同的方法调用,它们怎么会不同?
【问题讨论】:
谁能解释一下是怎么回事
scala> List(1,2).:::(List(3,4))
res15: List[Int] = List(3, 4, 1, 2)
scala> List(1,2) ::: List(3,4)
res16: List[Int] = List(1, 2, 3, 4)
如果方法调用结果应该是相同的方法调用,它们怎么会不同?
【问题讨论】:
如果是List(1,2).:::(List(3,4)),您可以直接在对象List(1,2) 上调用::: 方法。根据文档:
@param prefix 要添加的列表元素。
所以你得到:res15: List[Int] = List(3, 4, 1, 2)
当您不使用 .(点)表示法时,::: 根据文档表现为 右关联 操作:
@usecase def :::(前缀: List[A]): List[A] @inheritdoc
示例: {{{List(1, 2) ::: List(3, 4) = List(3, 4).:::(List(1, 2)) = List(1, 2, 3, 4)}} }
这意味着在 List(1,2) ::: List(3,4) 的情况下,方法 ::: 正在对象 List(3,4) 上被调用。
右关联操作基本意思如下:
xs ::: ys ::: zs 被解释为xs ::: (ys ::: zs)
16.6 部分描述与示例相同。
【讨论】: