Scala 为什么+;=不';你不能处理列表吗?

Scala 为什么+;=不';你不能处理列表吗?,scala,scala-collections,Scala,Scala Collections,虽然我知道有更多的idomatic方法可以做到这一点,但为什么这段代码不起作用呢?(大多数情况下,为什么第一次尝试仅使用x+=2不起作用。)这些错误消息(至少对于Scala的新手来说)看起来很奇怪吗?一些隐式def魔术不起作用 scala> var x: List[Int] = List(1) x: List[Int] = List(1) scala> x += 2 <console>:7: error: type mismatch; found : Int(2)

虽然我知道有更多的idomatic方法可以做到这一点,但为什么这段代码不起作用呢?(大多数情况下,为什么第一次尝试仅使用
x+=2
不起作用。)这些错误消息(至少对于Scala的新手来说)看起来很奇怪吗?一些
隐式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)
scala>varx:List[Int]=List(1)
x:List[Int]=List(1)
scala>x+=2
:7:错误:类型不匹配;
发现:Int(2)
必需:字符串
x+=2
^
scala>x+=“2”
:7:错误:类型不匹配;
找到:java.lang.String
必需:列表[Int]
x+=“2”
^
scala>x+=列表(2)
:7:错误:类型不匹配;
找到:列表[Int]
必需:字符串
x+=列表(2)

您使用了错误的运算符

若要附加到集合,应使用
:+
,而不是
+
。这是因为当尝试使用
+
连接到字符串来镜像Java行为时会出现问题

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

scala> x :+= 2

scala> x
res1: List[Int] = List(1, 2)
如果您想预先编写,也可以使用
+:

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

2 +: x

x :+ 2

2 :: x