在Scala中附加到Seq
下面的代码应该附加到一个Seq,但它打印一个空列表,这里出了什么问题在Scala中附加到Seq,scala,Scala,下面的代码应该附加到一个Seq,但它打印一个空列表,这里出了什么问题 object AppendToSeq extends App{ val x = Seq[Int]() x :+ 1 x :+ 2 println(x) } 创建的值x是一个不可变序列,在不可变序列上定义的方法:+返回一个新的Seq对象 因此,您的代码应该有x,x有一个var(一个可变变量),并且应该在每次追加(:+)操作后重新赋值,如下所示 scala> var x = Seq[
object AppendToSeq extends App{
val x = Seq[Int]()
x :+ 1
x :+ 2
println(x)
}
创建的值x是一个不可变序列,在不可变序列上定义的方法
:+
返回一个新的Seq对象
因此,您的代码应该有x,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)
创建的值x是一个不可变序列,在不可变序列上定义的方法
:+
返回一个新的Seq对象
因此,您的代码应该有x,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)
x:+1
通过将1
附加到现有的Seq
,x
来创建一个新的Seq
,但是新的Seq
没有保存在任何地方,也就是说,它没有分配给任何变量,所以它只是被丢弃了
如果要修改现有的Seq
,可以将变量设置为var
,而不是val
。然后,当您创建一个新的Seq
时,您可以用相同的名称保存它
scala> var x = Seq[Int]()
x: Seq[Int] = List()
scala> x = x :+ 7
x: Seq[Int] = List(7)
x:+1
通过将1
附加到现有的Seq
,x
来创建一个新的Seq
,但是新的Seq
没有保存在任何地方,也就是说,它没有分配给任何变量,所以它只是被丢弃了
如果要修改现有的Seq
,可以将变量设置为var
,而不是val
。然后,当您创建一个新的Seq
时,您可以用相同的名称保存它
scala> var x = Seq[Int]()
x: Seq[Int] = List()
scala> x = x :+ 7
x: Seq[Int] = List(7)
scala.collection.Seq
实际上并不保证是不可变的(例如,ArraySeq
扩展了它)。但是,:+
从来都不是一个变异方法,而是始终返回一个新的Seq
对象。scala.collection.Seq
实际上并不保证是不可变的(例如,ArraySeq
扩展了它)。然而,:+
从来都不是一个变异方法,而是总是返回一个新的Seq
对象。这在Scala中不是一个好的做法。它应该被分配到一个新的val
这在Scala中不是一个好的做法。应将其分配给新的val