Scala前置到ListBuffer拼图器
使用Scala 2.10.3。以下代码适用于我: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中,以冒号结尾的方法是在右参数而不是左参数上调用的,因此您的第二个
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