我有一个现有的 Scala 应用程序,它使用案例类,然后将其持久化在 MongoDB 中。我需要向案例类引入一个新字段,但它的值是从现有字段派生的。
例如,有电话号码,我想在保留原始电话号码的同时添加规范化的电话号码。我将更新 MongoDB 中的现有记录,但我需要将此规范化功能添加到现有的保存和更新代码中。
那么,在 Scala 中是否有任何不错的快捷方式可以将“钩子”添加到案例类的某个字段?例如,在 Java 中可以修改电话号码的设置器。
编辑:
Christian's answer中的解决方案单独工作正常,但在我的情况下,我有字段的默认值(我认为是因为Salat ...)
case class Person(name: String = "a", phone: Option[String] = None, normalizedPhone: Option[String] = None)
object Person {
def apply(name: String, phone: Option[String]): Person = Person(name, phone, Some("xxx" + phone.getOrElse("")))
}
如果使用类似的东西:
Person(phone = Some("s"))
我去拿:Person = Person(a,Some(s),None)