gpt4 book ai didi

scala - 理解 scala 枚举

转载 作者:行者123 更新时间:2023-12-03 04:35:47 24 4
gpt4 key购买 nike

我不得不说我不懂 Scala 枚举类。我可以从文档中复制粘贴示例,但我不知道发生了什么。

object WeekDay extends Enumeration {
type WeekDay = Value
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
import WeekDay._
  • type WeekDay = Value 是什么意思?为什么我必须这样写?
  • 为什么val Mon = Value?这到底意味着什么?
  • 为什么我必须导入WeekDay目的?并且,
  • 当我编写 val day = WeekDay.Mon 时,为什么输入的是 WeekDay.Value,而不是 WeekDay

最佳答案

Enumeration 特征有一个类型成员 Value 表示枚举的各个元素(它实际上是一个内部类,但这里的区别并不重要)。

因此,object WeekDay 继承了该类型成员。 type WeekDay = Value 行只是一个类型别名。它很有用,因为在使用 import WeekDay._ 将其导入其他地方后,您可以使用该类型,例如:

def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)

相反,最小版本将是:

object WeekDay extends Enumeration {
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}

并且您不必导入object WeekDay的内容,但是您需要使用类型WeekDay.Value并符合个人成员(member)资格。所以这个例子会变成

def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)
<小时/>

第二个问题是关于val Mon, ... = Value的含义。如果你不研究Enumeration的实现,这确实很令人困惑。这不是类型的赋值!相反,它调用 protected 同名方法Value,它返回Value类型的具体实例。

碰巧你可以在 Scala 中编写 val a, b, c = foo,并且对于每个值 a, b,和 c 方法 foo 将被一次又一次调用。 Enumeration 使用此技巧来递增内部计数器,以便每个值都是单独的。

如果您打开Enumeration 的 Scala API 文档并单击Visibility: All,您将看到该方法出现。

关于scala - 理解 scala 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11067396/

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