如何根据案例类的参数有条件地构建案例类



我目前正在尝试创建基于参数输入的不同构造的案例类。作为一个真实世界的用例,假设我们正在构建一个包含敏感信息的case类。因此,每当case类包含来自用户的数据时,我们都需要对他们的电话号码进行散列,否则就照常构建case类。如果这没有多大意义,我创建了一个更轻松的例子来说明我正在尝试做什么

假设我们正在创建一个不接受悲伤奶牛的案例类:

case class HappyCow(name: String, feeling: String)

我试图通过定义一个应用方法使case类构造成为有条件的:

case class HappyCow(name: String, feeling: String) {
def apply(name: String, feeling: String): HappyCow =
if (feeling == "sad") HappyCow(name, "Happy")
else HappyCow(name, feeling)
}

然而,测试我的解决方案是否有效会导致:

val cow1 = HappyCow("Moowy", "excited")
val cow2 = HappyCow("MooMoo", "sad")
println(cow1) // HappyCow(Moowy,excited)
println(cow2) // HappyCow(MooMoo,sad)
println(cow2.feeling) // sad

我期望CCD_;快乐">

apply应该是伴随对象的方法,而不是case类。

apply的内部定义也取代了HappyCow(name, "Happy")。。。对于CCD_ 5。。。,否则就是无限递归。

case class HappyCow(name: String, feeling: String)
object HappyCow {
def apply(name: String, feeling: String): HappyCow =
if (feeling == "sad") new HappyCow(name, "Happy")
else new HappyCow(name, feeling)
}
val cow1 = HappyCow("Moowy", "excited")
val cow2 = HappyCow("MooMoo", "sad")
println(cow1) // HappyCow(Moowy,excited)
println(cow2) // HappyCow(MooMoo,Happy)
println(cow2.feeling) // Happy

最新更新