Scala案例分类和不可变性
示例
Scala编译器默认在参数列表中为每个参数加上前缀val。这意味着,默认情况下,案例类是不可变的。每个参数都具有一个访问器方法,但是没有可变器方法。例如:
case class Foo(i: Int) val fooInstance = Foo(1) val j =fooInstance.i //得到 fooInstance.i = 2 //编译时异常(变异:重新分配给val)
在案例类中将参数声明为var会覆盖默认行为,并使案例类可变:
case class Bar(var i: Int) val barInstance = Bar(1) val j =barInstance.i //得到 barInstance.i = 2 //组
案例类为“可变”的另一个实例是案例类中的值是可变的:
import scala.collection._ case class Bar(m: mutable.Map[Int, Int]) val barInstance = Bar(mutable.Map(1 -> 2)) barInstance.m.update(1, 3) //突变 barInstance // Bar(Map(1 -> 3)
请注意,此处发生的“变异”是在m指向的映射中,而不是指向m自身。因此,如果某个其他对象具有m成员身份,它也会看到更改。请注意,在以下示例中,更改instanceA也将如何更改instanceB:
import scala.collection.mutable case class Bar(m: mutable.Map[Int, Int]) val m = mutable.Map(1 ->2) val barInstanceA = Bar(m) val barInstanceB = Bar(m) barInstanceA.m.update(1,3) barInstanceA // Bar = Bar(Map(1 -> 3)) barInstanceB // Bar = Bar(Map(1 -> 3)) m // scala.collection.mutable.Map[Int,Int] = Map(1 -> 3)
热门推荐
10 红包祝福语简短10字
11 春节最好的祝福语简短
12 鸡脚结婚祝福语大全简短
13 拿到驾照的祝福语简短
14 祝福语简短唯美老师的话
15 订婚祝福语简短诗句
16 给妹妹婚礼祝福语简短
17 小朋友上学祝福语简短
18 圣诞贺卡祝福语简短高级