Che*_*rry 2 scala copy function case-class
是否可以在 case 类中添加自定义行为来复制函数?
像这样的东西:
case class User (version: Integer) { //other fields are omitted
//something like this
override def copy (...) {
return copy(version = version + 1, ...)
}
}
Run Code Online (Sandbox Code Playgroud)
所以我不想重写复制功能,只需添加增加版本字段并复制其他字段。我怎样才能做到这一点?
向基本功能(如复制)添加行为并不是一个好主意。函数式方法是让数据只是数据,并在从外部对数据进行操作的函数中具有行为。
但是如果你真的想这样做,你只需要重新实现复制方法,就像这样:
case class User(name:String, age:Int, version:Int = 0) {
def copy(name:String = this.name, age:Int = this.age) = User(name,age,version+1)
}
Run Code Online (Sandbox Code Playgroud)
用法:
scala> User("John Doe", 25).copy(age = 26)
res4: User = User(John Doe,26,1)
Run Code Online (Sandbox Code Playgroud)
但请注意,为了获得有用的行为,您可能还必须重新实现一些其他方法。例如,您可能不希望人们在构造用户时能够传递版本。因此,您需要将构造函数设为私有并添加一个 apply 方法。
您也可能不希望版本字段被视为相等。所以你必须重新定义 equals 和 hashCode 以省略 version 字段。因此,既然您已经重新定义了案例类给您的几乎所有内容,那么您不妨将该类设为普通的非案例类。
一般来说,我认为 case 类应该用于纯数据,而混合数据和逻辑的更多面向对象的类最好作为普通类来完成,即使这意味着更多的类型。
| 归档时间: |
|
| 查看次数: |
953 次 |
| 最近记录: |