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)
大家好,我在SCALA上创建了以下案例类: 然后,如您所见,BGP包含Term并扩展到模式,Val包含值并扩展到Term,U、L、B包含字符串并扩展到Value,在我的函数中,我想访问包含U或L或B大小写类的字符串,变量valor=Val(y). value包含一个U类,例如,但当我编写valor时。XXXX没有给我显示名称选项。最大的问题是如何从U访问字符串名称?
我对各种case类实现有一个封闭的特性。我想为同一个匹配表达式同时对多个类进行模式匹配。我似乎不能不分解case类和它们之间的“|” 目前看起来像: 代码中的另一个位置:
如何只在pos时返回case类
本文向大家介绍Python的可变类型和不可变类型?相关面试题,主要包含被问及Python的可变类型和不可变类型?时的应答技巧和注意事项,需要的朋友参考一下 可变数据类型:列表、字典、可变集合 不可变数据类型:数字、字符串、元组、不可变集合
问题内容: 我正在尝试学习可变/不可变的类,而我遇到了这篇文章 提供的部分答案是: 如果要强制不变性,则不能有子类。例如,请参见java.lang.String,由于这个原因,它是最终类:为了防止人们将String子类化以使其可变。 好的,我了解, 但是 ,您将如何处理此问题。假设您的任务是创建3个Employee类,Accountant,ITDepartment和QualityAssurance
我有一个包含许多列的数据框架。我也有一个功能 这相当复杂,但需要一些字符串并返回一个火花MLlib向量。 现在,我想查看DF中的一些列(我事先不知道是哪一列),将它们传递给getFeatureVector,并添加一个包含结果向量的新列。 我可以访问我想要使用的列的数组,我写了一个函数将它转换为string,并生成一个数组列: 最后,我尝试制作一个udf并将其应用于df: 但是当我运行它时,我得到j