gpt4 book ai didi

scala - 为什么 Scala 有一个 case 对象?

转载 作者:行者123 更新时间:2023-12-04 16:43:14 25 4
gpt4 key购买 nike

它不能用 params 初始化,它只会与自身进行比较(单例)。所以它的equals和hash code函数没有优势。有没有人遇到过他们觉得有用的案例?

最佳答案

您可以使用 case 对象作为枚举的替代方法。

详情请见:Case objects vs Enumerations in Scala

该问题的一个简化示例:

sealed trait Currency {
def name: String
def symbol: String
}

case object EUR extends Currency {
val name = "EUR"
val symbol = "€"
}

case object USD extends Currency {
val name = "USD"
val symbol = "$"
}

好处
  • 这样可以有更多的字段(与 Enumeration 中的 ID 和名称相比)
  • 如果匹配不是详尽的,编译器会发出警告(在 sealed 类型层次结构的情况下)。

  • 所以这段代码

    val ccy: Currency = EUR
    ccy match {
    case EUR =>
    println("Euro")
    }

    会导致

    Warning:(27, 7) match may not be exhaustive.
    It would fail on the following inputs: USD
    ccy match {



    缺点
  • 没有“按名称获取”方法( Enumeration 提供 withName() )
  • 您不能迭代“所有”元素
  • 关于scala - 为什么 Scala 有一个 case 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32602356/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com