【发布时间】:2013-12-16 12:27:52
【问题描述】:
我有一个具有某些 val 作为参数的 Scala 案例类。我有几个方法可以使用这个案例类。假设我的案例类定义如下:
case class CaseA(a: Int, b: List[CaseB])
case class CaseB(a: Int, b: text, c: Boolean)
CaseA 和 CaseB 都代表我的案例类的域模型。但是当我在我的应用程序中使用它们时,我想根据 CaseB 的布尔字段向 CaseA 添加一些行为。例如,假设在 CaseA 中,val b 有 4 个 CaseB 对象。我想添加一个贯穿 b 的行为,并告诉我 CaseB 中的任何一个元素是否将 val c 设置为 true。
我想出的是 CaseA 的以下实现:
case class CaseA(a: Int, b: List[CaseB], c: Boolean)
但是这种方法的问题在于,当我从数据库加载我的 CaseA 对象时,我不需要 val c,因为 val c 是计算出来的,而不是 CaseA 对象的一部分。我更进一步,将我的 CaseA 修改为如下所示:
case class CaseA(a: Int, b: List[CaseB], c: Option[Boolean])
我可以看到它已经变得丑陋了。如何向我的案例类添加行为,以便 val c 不必是 CaseA 对象的一部分,而是每次在运行时计算?
【问题讨论】: