我想使用之前声明的自己的参数来设置案例类的参数的默认值。类似的东西:
case class TestClass(param1 : String, param2 : String = s"The value of param1 is : $param1")
然而,这会引发错误,指出未定义变量。任何人都可以建议我如何实现这一目标或任何其他前进方式?
答案 0 :(得分:3)
您可以在随附对象中提供额外的apply
方法来计算case class
的某些参数:
case class TestClass(param1 : String, param2 : String)
object TestClass {
def apply(param1: String): TestClass =
TestClass(param1, s"The value of param1 is : $param1")
}
您可以使用apply
方法:
scala> TestClass("foo")
res0: TestClass = TestClass(foo,The value of param1 is : foo)
scala> TestClass("foo", "bar")
res1: TestClass = TestClass(foo,bar)
请注意,虽然可以将param2
移动到第二个参数列表或类定义中:
case class TestClass(param1: String)(param2: String = s"The value of param1 is : $param1")
// Here it's also harder to override the value of `param2`, if needed.
case class TestClass(param1: String) {
val param2: String = s"The value of param1 is : $param1"
}
这会更改生成的unapply
,equals
,hashCode
以及最重要的copy
方法的语义,因此在许多情况下,这不是一个可行的解决方案。