Почему + = не работает со списками? - PullRequest
4 голосов
/ 27 февраля 2011

Хотя я знаю, что есть более нелепые способы сделать это, почему этот код не работает?(В основном, почему первая попытка просто 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 ]

10 голосов
/ 27 февраля 2011

Вы используете неправильный оператор.

Чтобы добавить коллекцию, вы должны использовать :+, а не +. Это связано с проблемами, возникающими при попытке отразить поведение 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 голосов
/ 27 февраля 2011

Посмотрите список в Scala API. Методы добавления элемента в список:

2 +: x

x :+ 2

2 :: x
...