【问题标题】:How can I have curried case class constructors?我怎样才能有咖喱案例类构造函数?
【发布时间】:2019-09-04 21:10:18
【问题描述】:

我写了以下内容:

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


    【解决方案1】:

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

    试试

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

    【讨论】:

      【解决方案2】:

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

      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)
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-21
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多