我们都知道在C++,Java中枚举类型是很常见,也是很好实现的,今天忽然想到在Scala中枚举类型应该是什么样的?如果让我现在自己去构造的话,我觉得用Scala中的单类(Singleton)Object应该就可以实现。下课之后回来查了查,发现Scala提供一个叫做Enumeration的抽象类,可以通过继承它来实现一个枚举类型。当然还是需要用Object来实现,下面是官网文档中的一个Enumeration的例子。
object Main extends Application {
object WeekDay extends Enumeration {
type WeekDay = Value
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
import WeekDay._
def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
WeekDay filter isWorkingDay foreach println
}
Value是Enumeration中的一个内部类,同名的Value方法能够返回类的一个实例,在这里的意思就是说值如Weekday.Mon的类型是Weekday.Value,并且该枚举类型中的所有值的类型都是Weekday.Value。说的比较绕口,但是这基本上就是《Programming in Scala》中的原话,当初看的时候就没有理解,难怪对Scala中的枚举类型一点印象都没有。我个人觉得就是通过这种方式定义了一个新的类型,在上例中就是Weekday,至于为什么用这种方式,我个人也不了解,毕竟我也是初学者,只有在使用中去体会了。最后一行是Scala中的一种常见的语法糖,其实就是省略了括号和点的方法调用。
分享到:
相关推荐
Scala 是一种很有品味的类型语言:它是静态类型的,但仅在需要的地方显式定义类型。Scala 向对象和函数式语言两方面获得了强大的特性,然后用一些新奇的点子把它们漂亮地整合成一 它的语法是如此的轻量级,而原语又...
1.2.3 在IDE中运行Scala REPL 8 1.3 使用Scala 8 1.4 并发 17 1.5 本章回顾与下一章提要 27 第2章 更简洁,更强大 28 2.1 分号 28 2.2 变量声明 29 2.3 Range 31 2.4 偏函数 32 2.5 ...
19.9 Scala类型系统 322 19.10 自身类型 323 19.11 依赖注入 325 19.12 抽象类型 L3 327 19.13 家族多态 L3 329 19.14 高等类型 L3 333 练习 336 第20章 解析 A3 341 20.1 文法 342 20.2 组合解析器操作 ...
带有枚举的标量表 如何在模型类中创建具有枚举类型的表单并将具有枚举类型的模型转换为 json 的示例。
Enumeratum是Scala的一种类型安全且功能强大的枚举实现,它提供详尽的模式匹配警告,与流行的Scala库的集成以及不会破坏您的IDE的惯用用法。 它旨在与Scala内置的Enumeration足够相似,以易于使用和理解,同时提供...
也用于在条带枚举模型上提供类型安全的枚举 stripe-scala 被有意设计为使用最少的外部依赖,因此它更容易与 scala 代码库集成 安装 目前,stripe-scala 处于 pre-1.0 阶段。 它为至少一家生产中的公司的支付处理提供...
研讨会前检出此存储库git clone git@github.com:bszwej/scala-3-crash-course.git 用sbt编译sbt compile 将其导入您喜欢的IDE中VSCode +金属(推荐) 智能目录无括号的语法枚举上下文语言功能: 给定/使用扩展方法...
此示例说明如何创建WebSocket端点以及如何使用: 枚举器.fromFile 枚举器枚举器枚举器.generateM 枚举器交错Iteratee.foreach Iteratee.ignore 并发单播频道推送您可以在我的存储库找到一个简单的客户端进行测试。...
如果您使用的是SBT,请将以下内容添加到您的构建文件中。 libraryDependencies ++ = Seq ( " com.claireneveu " %% " macrame " % " 1.2.6 " , compilerPlugin( " org.scalamacros " % " paradise " % " 2.1.0 " ...
案例类的字段可以是其他案例类,Scala集合,选项,原始或AnyVal类型和类,元组,Scala枚举,标准类型和类: String , Either , BigDecimal , java.time.Instant , scala.concurrent.duration.FiniteDuration , ...
enumeratum.zip,Enumeratuma类型安全、无反射、功能强大的Scala枚举实现,具有详尽的模式匹配警告和有用的集成。
类和继承 属性和字段 接口 可见性修饰词 扩展 数据对象 泛型 嵌套类 枚举类 对象表达式和声明 代理模式 代理属性 函数和lambda表达式 函数 高阶函数和lambda表达式 内联函数 其它 多重申明 Ranges 类型检查和自动...
前言 关于翻译 参考文档 相关书籍 入门 基本语法 惯用法 编码规约 基础 基本类型 ...枚举类 ...类型检查与类型转换 ...类型安全的构建器(Type-Safe Builder) 动态类型(Dynamic Type) ...在 Kotlin 中调用 Java 代码...与 Scala 比较
枚举类 61 对象表达式和对象声明 63 委托 66 委托属性 67 ...
木兰玉兰是一个通用宏,用于自动实现由产品类型(例如,案例类)和副产品类型(例如,枚举)组成的数据类型的类型类。 它支持开箱即用的递归定义的数据类型,并且在编译过程中不会花费大量时间。特征派生案例类,...
Kotlin 语言文档 pdf 目录 概述 4 使用 Kotlin 进行服务器端开发 4 使用 Kotlin 进行 Android 开发 5 Kotlin JavaScript 概述 6 Kotlin 1.1 的新特性 7 开始 15 ...与 Scala 比较【官方已删除】 187
GraphQL枚举的枚举类。 GraphQL类型字段(例如,参数化字段)或“解析器”的接口。 GraphQL查询,变异和订阅的客户端请求类。 产品特点 用Java,Kotlin或Scala生成类。 通过文件名模式进行递归模式查找。 根据...
TagHighlight是一个插件,可在Vim的源代码中突出显示类,变量,类型等的名称。 这样可以更快,更轻松地发现代码中的错误。 通过使用旺盛的ctags并解析输出,可以清晰地以不同的颜色突出显示typedef,#defines,枚举...
这些采取对基本python类型的扩展形式,其背后的总体思路是模拟scala集合库以提供面向对象但可组合的接口。 您将获得所有基本构建块,以帮助您以明智的方式在python中表达单子变换: 那么,这甚至包括哪些包装? ...