Scala前置于ListBuffer益智游戏

时间:2014-02-13 21:38:11

标签: 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
       ^

我错过了什么?

3 个答案:

答案 0 :(得分:4)

任何以:结尾的运算符都是右关联的。

所以当你写:

sequence +=: x

它被解析为:

x.+=:(sequence)

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

答案 1 :(得分:1)

在Scala中,以冒号结尾而不是左边的参数调用以冒号结尾的方法,所以你的第二个例子是

x.+=:(sequence)

由于Int没有这样的运算符而失败。

答案 2 :(得分:1)

+=:是一个前置运算符(如::表示不可变列表)所以正确关联是有意义的

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