scala - 如何在设置属性值之前和之后存储对象状态

标签 scala getter-setter case-class scala-2.11

我有一个类 Demo 我想在设置属性值之前保存对象值这是我的代码

case class Demo (var abc:String)

      val d =Demo("bob")
      var oldDemo=d
      d.abc="joe"

      println("old name is "+oldDemo.abc +" the new name is "+d.abc)

控制台打印的输出是

old name is joe the new name is joe

我想在设置 d.abc="joe" 之前存储对象值,这样当我执行 oldDemo.abc 时我可以得到 bob > 请指导我哪里出错了,什么是实现我目标的正确方法。如果我做了一些愚蠢的事情,我深表歉意

最佳答案

您可以在案例类上使用 copy()

val d1 = Demo("abc")
val d2 = d1.copy()
d1.abc = "def"

// d2 : Demo = Demo(abc)
// d1 : Demo = Demo(def)

一种更符合 Scala 习惯的方法是使用不可变的案例类:

case class Person(name: String, age: Int)
val bob = Person("Bob", 30)
val joe = bob.copy(name="Joe")

// bob : Person = Person(Bob,30)
// joe : Person = Person(Joe,30)

关于scala - 如何在设置属性值之前和之后存储对象状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31740845/

相关文章:

json - 为元组序列 Play Scala Json Writer

scala - Scala中使用案例类的DSL

scala语法匹配多个案例类类型而不分解案例类

parsing - 通用匹配Token的有效实现

用于创建 GCP Publisher 的 Scala Spark 代码抛出 : java. lang.NoSuchMethodError : com. google.common.base.Preconditions.checkArgument

xml - 在 Scala 之间加入带有 XML 节点的字符串

php - 是否可以从 PHP 中的数组值自动生成 Getter/Setter?

c++ - getter和setter方法有什么用?

scala - 为什么这个通配符函数告诉我它的参数数量错误?

JavaScript 设置 :Get Pointless?