使用一些自己的参数来实例化Scala案例类参数

时间:2018-05-15 16:28:07

标签: scala

我想使用之前声明的自己的参数来设置案例类的参数的默认值。类似的东西:

case class TestClass(param1 : String, param2 : String = s"The value of param1 is : $param1")

然而,这会引发错误,指出未定义变量。任何人都可以建议我如何实现这一目标或任何其他前进方式?

1 个答案:

答案 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"
} 

这会更改生成的unapplyequalshashCode以及最重要的copy方法的语义,因此在许多情况下,这不是一个可行的解决方案。

相关问题