向量scala的前置

向量scala的前置,scala,scala-collections,Scala,Scala Collections,scala的新手,我发现处理集合的符号表示法令人困惑。要将项目附加到列表或向量,我可以使用: List(1, 2, 3) :+ 4 我知道这是这个方法的中缀形式 List(1, 2, 3).:+(4) 如果我想在列表前加上前缀,我可以使用 List(1, 2, 3).+:(4) 然而,中缀形式给了我一个编译错误 List(1,2,3) +: 4 Error:(121, 16) value +: is not a member of Int Vector(1,2,4) +: 4

scala的新手,我发现处理集合的符号表示法令人困惑。要将项目附加到列表或向量,我可以使用:

List(1, 2, 3) :+ 4
我知道这是这个方法的中缀形式

List(1, 2, 3).:+(4)
如果我想在列表前加上前缀,我可以使用

List(1, 2, 3).+:(4)
然而,中缀形式给了我一个编译错误

List(1,2,3) +: 4
Error:(121, 16) value +: is not a member of Int
Vector(1,2,4) +: 4
              ^

在Scala中,以冒号结尾的方法在中缀表示法中使用的方法是右关联的,这意味着该方法位于右侧的元素上。你需要:

4 +: List(1,2,3)
当使用带有点符号的
List[T]
时,这不会发生,因为这是对List的显式调用。当使用中缀表示法时,编译器会执行额外的语法分解。这:

List(1,2,3) +: 4
变成

4.+:(List(1,2,3))

但是在
Int
上找不到
+:
,所以它会抱怨。

谢谢你可以推荐一些关于修改集合api的基础知识以及如何解释重载运算符的资源,关于这个主题的scala文档非常棒sparse@LukeDeFeo我先从