使用Seq追加运算符“+:”时Scala推断错误的类型

时间:2014-12-04 19:00:14

标签: scala scala-collections

我对Scala还不熟悉。我在尝试将两个序列附加在一起时遇到了麻烦,因为编译器抱怨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 个答案:

答案 0 :(得分:4)

这是因为:+运算符需要单个项目,而不是序列。因此,您尝试执行的操作与var y:List[String] = List("b", List("a"))相当,后者无效。您可以在the documentation of Seq中看到这一点,其中显示:+的类型为A => Seq[A]

我想您可能想要使用++运算符。