2011-02-27 106 views
4

虽然我知道有更多的这样做的idomatic方式,为什么不这个代码工作? (主要是,为什么第一次尝试只是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) 

回答

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) 

如果要预先考虑,也可以使用+:

2

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

2 +: x 

x :+ 2 

2 :: x 
相关问题