Как я могу иметь карри конструкторы класса case? - PullRequest
5 голосов
/ 14 апреля 2019

Я написал следующее:

case class SuperMessage(message: String)(capitalMessage: String = message.capitalize)
val message = "hello world"
val superMessage = SuperMessage(message)()

, но я не могу сделать superMessage.capitalMessage

Что происходит?

Ответы [ 2 ]

8 голосов
/ 14 апреля 2019

Параметры из второго списка параметров класса дел по умолчанию не val с.

Попробуйте

case class SuperMessage(message: String)(val capitalMessage: String = message.capitalize)
5 голосов
/ 15 апреля 2019

В дополнение к ответу Дмитрия, я должен отметить, что все функциональные возможности класса дел относятся только к параметрам в первом списке, например,

val message1 = SuperMessage("hello world")()
val message2 = SuperMessage("hello world")("surprise")
println(message1 == message2)

напечатает true. Если это не то, что вам нужно, определите отдельный метод apply:

case class SuperMessage(message: String, capitalMessage: String)

object SuperMessage {
  def apply(message: String) = SuperMessage(message, message.capitalize)
}
...