我怎样才能拥有curried案例类构造函数?

问题描述 投票:4回答:2

我写了以下内容:

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

但我不能做superMessage.capitalMessage

这是怎么回事?

scala functional-programming jvm currying case-class
2个回答
8
投票

案例类的第二个参数列表中的参数默认不是vals。

尝试

case class SuperMessage(message: String)(val capitalMessage: String = message.capitalize)

5
投票

除了Dmytro的答案,我应该指出所有案例类功能只关心第一个列表中的参数,例如

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)
}
© www.soinside.com 2019 - 2024. All rights reserved.