【发布时间】:2014-02-04 17:15:37
【问题描述】:
在 Scala 中,我有一个表示一些数据的案例类:
case class Foo( val start : Int, val end : Int )
而且我经常使用复制方法。
但是,我现在想要添加一个额外的成员作为标识符,因为我想要以下相等行为:
case class NewFoo( val id : Int, val start : Int, val end : Int )
{
override def equals( any : Any ) = any match
{
case other : NewFoo => id == other.id
case _ => false
}
}
但是,我现在想防止用户在复制NewFoo 实例时更改id,因此,一旦创建NewFoo,其数据可能会更改,但其id 将始终保持不变。
案例类可以做到这一点吗?我怀疑不是,因为这并不是它们的设计目的。另一方面,我读过的案例类的定义是,它们是“应该完全依赖于它们的构造函数参数的普通且不可变的数据保存对象”,我的用例似乎没有破坏这个定义.
如果一个案例类不合适,有没有一种方法可以复制一个案例的功能,尤其是复制方法,而无需明确的案例类?我没有使用模式匹配。
【问题讨论】: