Scala前置到ListBuffer拼图器

Scala前置到ListBuffer拼图器,scala,Scala,使用Scala 2.10.3。以下代码适用于我: val sequence = new ListBuffer[Int]() sequence.+=:(x) 但如果我写: val sequence = new ListBuffer[Int]() sequence +=: x 我得到: value +=: is not a member of Int sequence +=: x ^ 我遗漏了什么?在Scala中,以冒号结尾的方法是在右参数而不是左参数上调用的,因此您的第二个

使用Scala 2.10.3。以下代码适用于我:

val sequence = new ListBuffer[Int]()
sequence.+=:(x)
但如果我写:

val sequence = new ListBuffer[Int]()
sequence +=: x
我得到:

value +=: is not a member of Int
  sequence +=: x
       ^

我遗漏了什么?

在Scala中,以冒号结尾的方法是在右参数而不是左参数上调用的,因此您的第二个示例是

x.+=:(sequence)

因为
Int
没有这样的操作符,所以失败。

任何以
结尾的操作符都是右关联的

所以当你写作时:

sequence +=: x
它被解析为:

x.+=:(sequence)

这当然会失败,因为
x
没有
+=:
方法

+=:
是一个前置操作符(就像不可变列表的
一样),所以右关联是有意义的

1 +=: 2 +=: 3 +=: ListBuffer() += 4 += 5 += 6
  //  ListBuffer(1, 2, 3, 4, 5, 6)

仅适用于
列表
,通常用于您想要的集合
+:
:+
。把它们混合在一起以获得额外的乐趣:
1+:2+:Seq(3,4):+5:+6