当前位置: 首页 > 编程笔记 >

Scala案例分类和不可变性

邬友樵
2023-03-14
本文向大家介绍Scala案例分类和不可变性,包括了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)
           

 类似资料:
  • 大家好,我在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