为什么+ =不适用于列表?

时间:2011-02-27 18:33:33

标签: scala scala-collections

虽然我知道有更多的自我实现方式,但为什么这段代码不起作用? (大多数情况下,为什么第一次尝试只是x += 2才起作用。)这些非常奇特的外观(至少是Scala的新手)错误消息implicit def魔法不能正常工作吗?

scala> var x: List[Int] = List(1)
x: List[Int] = List(1)

scala> x += 2
<console>:7: error: type mismatch;
 found   : Int(2)
 required: String
       x += 2
            ^

scala> x += "2"
<console>:7: error: type mismatch;
 found   : java.lang.String
 required: List[Int]
       x += "2"
         ^

scala> x += List(2)
<console>:7: error: type mismatch;
 found   : List[Int]
 required: String
       x += List(2)

2 个答案:

答案 0 :(得分:10)

你使用了错误的操作符。

要附加到收藏集,您应使用:+而不是+。这是因为尝试使用+连接到字符串来镜像Java的行为时导致的问题。

scala> var x: List[Int] = List(1)
x: List[Int] = List(1)

scala> x :+= 2

scala> x
res1: List[Int] = List(1, 2)

如果您想要前置,也可以使用+:

答案 1 :(得分:2)

查看Scala API中的List。将元素添加到列表的方法是:

2 +: x

x :+ 2

2 :: x