当前位置: 首页 > 知识库问答 >
问题:

了解scala枚举

王曜文
2023-03-14

我不得不说我不理解Scala枚举类。我可以从文档中复制粘贴示例,但我不知道是怎么回事。

object WeekDay extends Enumeration {
  type WeekDay = Value
  val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
import WeekDay._
  • 什么是类型WeekDay=value?为什么我必须写这个?
  • 为什么val Mon=value?这到底是什么意思?
  • 为什么必须导入weekday对象?并且,
  • 当我编写val day=weekday.mon时,为什么要键入weekday.value,而不是键入weekday

共有1个答案

祁兴运
2023-03-14

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
}

而且您不必导入对象weekday的内容,但您需要使用类型weekday.value并限定单个成员。因此该示例将变成

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

您可以在Scala中编写val a,b,c=foo,对于每个值abc方法foo将被反复调用。enumeration使用此技巧递增内部计数器,使每个值都是单独的。

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

 类似资料:
  • 本文向大家介绍详细了解C# 枚举与位枚举,包括了详细了解C# 枚举与位枚举的使用技巧和注意事项,需要的朋友参考一下 一、枚举的概念:   C# 枚举(Enum), 枚举类型是用于声明一组命名的常数的基本数据类型(值类型); 二、枚举的定义:   声明enum变量:   其中enum_name 指定枚举的类型名称;  enumeration list 是一个用逗号分隔的标识符列表;   枚举列表中的

  • 我正在努力理解这个概念。我清楚地了解期货是什么。我对Promises有点困惑。下面的代码片段: 现在,以下两个代码片段之间有什么区别? 和 我对第一个的理解是,p成功将完成与该p相关的未来计算。计算是异步的吗?这与使用 Future 块完成与 Promise p 关联的 Future f 的第二个代码片段有何不同?

  • 假设我有这样的枚举 我也有一个类,我想扩展有序[SimpleEnum] 所以在SimpleClass中,我只需要获取附加到相应SimpleEnum val的值。 在java中,我能够声明一个变量的枚举和访问一个实际的值对应于它的这个var,在scala我正在寻找一种方法来获取枚举的实例,并接触到它的值。

  • 问题内容: 是否有比这更好的“解决方法”?访问TableMap上的方法时,我想避免使用PREFIX(局部变量)。 解决方法! 需要! 整个代码示例: 问题答案: 我认为您可能正在尝试将过多的情报投入其中。 我发现这种方法非常有用。它避免了由于无法扩展s 而引起的许多问题(实际上,您可以但不能以非常有用的方式)。 本质上,将其作为子类并将其特性作为传递给您的超类。这样,您仍然可以获得包括类型安全性在

  • 本文向大家介绍谈谈你可能并不了解的java枚举,包括了谈谈你可能并不了解的java枚举的使用技巧和注意事项,需要的朋友参考一下 前言 枚举在java里也算个老生长谈的内容了,每当遇到一组需要类举的数据时我们都会自然而然地使用枚举类型: 当然今天我们要探讨的并非是java中enum的基础语法,本次的主题将会深入enum的本质,并探讨部分高阶用法。本文基于Oracle JDK 14.0.2和jad v

  • 和前面相似,解构 enum 方式如下: // 需要 `allow` 来消除警告,因为只使用了一个变量。 #[allow(dead_code)] enum Color { // 这三者仅由它们的名字来表示。 Red, Blue, Green, // 这些元组含有类似的 `u32` 元素,分别对应不同的名字:颜色模型(color models)。 RGB