Scala выводит неверный тип при использовании оператора дополнения Seq "+:"

Я все еще довольно новичок в Скале. У меня возникают проблемы при попытке добавить две последовательности вместе, потому что компилятор жалуется на тип Seq. Я хотел бы начать с Seq[String] var и заменить его добавлением двух Seq [String]. В сеансе REPL ниже мы видим, что y:+ x является Seq[Object], но почему?

Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71).
Type in expressions to have them evaluated.
Type :help for more information.

scala> val x = Seq[String]("a")
x: Seq[String] = List(a)

scala> var y = Seq[String]("b")
y: Seq[String] = List(b)

scala> y = y :+ x
<console>:9: error: type mismatch;
 found   : Seq[Object]
 required: Seq[String]
       y = y :+ x
             ^

scala> val z = y :+ x
z: Seq[Object] = List(b, List(a))

1 ответ

Решение

Это потому что :+ Оператор ожидает один элемент, а не последовательность. То, что вы пытаетесь сделать, сравнимо с var y:List[String] = List("b", List("a")), который не действителен. Вы можете увидеть это в документации Seq, которая показывает тип :+ быть A => Seq[A],

Я думаю, что вы, вероятно, хотите использовать ++ оператор вместо.

Другие вопросы по тегам