以下代码应该附加到Seq,但它会打印一个空列表,这里有什么问题?
object AppendToSeq extends App{
val x = Seq[Int]()
x :+ 1
x :+ 2
println(x)
}
答案 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
附加到现有1
,Seq
来创建新的x
,但新的Seq
未保存任何地方,即它没有分配给任何变量,所以它就被扔掉了。
如果您想修改现有的Seq
,可以将变量改为var
而不是val
。然后,当您创建新的Seq
时,可以使用相同的名称保存它。
scala> var x = Seq[Int]()
x: Seq[Int] = List()
scala> x = x :+ 7
x: Seq[Int] = List(7)