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]
,
Я думаю, что вы, вероятно, хотите использовать ++
оператор вместо.