附加到Scala中的Seq

时间:2017-05-16 04:47:37

标签: scala

以下代码应该附加到Seq,但它会打印一个空列表,这里有什么问题?

object AppendToSeq extends App{

    val x = Seq[Int]()

    x :+ 1
    x :+ 2

    println(x)

}

2 个答案:

答案 0 :(得分:4)

创建的值x是不可变的序列,并且在不可变序列上定义的方法:+返回一个新的Seq对象。

所以你的代码应该有x有一个var(一个可变变量),它应该在每次追加(:+)操作后重新赋值,如下所示。

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

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

scala> x = x :+ 2
x: Seq[Int] = List(1, 2)

scala> x
res2: Seq[Int] = List(1, 2)

答案 1 :(得分:2)

x :+ 1通过将Seq附加到现有1Seq来创建新的x,但新的Seq未保存任何地方,即它没有分配给任何变量,所以它就被扔掉了。

如果您想修改现有的Seq,可以将变量改为var而不是val。然后,当您创建新的Seq时,可以使用相同的名称保存它。

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

scala> x = x :+ 7
x: Seq[Int] = List(7)