什么';他对Scala';什么是可变集合?

什么';他对Scala';什么是可变集合?,scala,collections,lazy-evaluation,lazy-sequences,Scala,Collections,Lazy Evaluation,Lazy Sequences,我认为这个问题本质上是关于在易变性的背景下什么是懒惰 在Scala(or)编程中,他们给出了如何在不可变和可变集合上使用视图的示例。在那一部分,他们说 [转换器方法]将至少一个集合作为其接收器对象,并在其结果中生成另一个集合。。。视图是一种特殊的集合,它表示一些基本集合,但延迟地实现其所有转换器 他们给出了不可变集合的例子,我理解懒惰在那里的作用。但我正在与惰性在可变集合示例中扮演的角色作斗争: [可变序列视图]上的许多transformer函数提供了一个查看原始序列的窗口。。。一个例子 视图不

我认为这个问题本质上是关于在易变性的背景下什么是懒惰

在Scala(or)编程中,他们给出了如何在不可变和可变集合上使用视图的示例。在那一部分,他们说

[转换器方法]将至少一个集合作为其接收器对象,并在其结果中生成另一个集合。。。视图是一种特殊的集合,它表示一些基本集合,但延迟地实现其所有转换器

他们给出了不可变集合的例子,我理解懒惰在那里的作用。但我正在与惰性在可变集合示例中扮演的角色作斗争:

[可变序列视图]上的许多transformer函数提供了一个查看原始序列的窗口。。。一个例子

视图不复制这些元素,它只是提供对它们的引用

def否定(xs:collection.mutable.Seq[Int])=

对于(i,这里有一个更好的例子来说明这种懒惰行为:

val a = Array(1,2,3)
val b = a.map(_ + 5)
val c = a.view.map(_ + 5)
println(b(1)) //prints 7
println(c(1)) // prints 7

a(1) = 5

println(b(1)) // still prints 7, since that array was computed on instantiation
println(c(1)) // now prints 10, since elements of c are lazily evaluated each time.

在不可变集合中发生的每一件懒惰的事情在可变集合中也会发生。
def negate(xs: collection.mutable.Seq[Int]) = 
  for (i <- 0 until xs.length) xs(i) = - xs(i)

negate(subarr)
arr  // Array(0, 1, 2, -3, -4, -5, 6, 7, 8, 9)
val a = Array(1,2,3)
val b = a.map(_ + 5)
val c = a.view.map(_ + 5)
println(b(1)) //prints 7
println(c(1)) // prints 7

a(1) = 5

println(b(1)) // still prints 7, since that array was computed on instantiation
println(c(1)) // now prints 10, since elements of c are lazily evaluated each time.