scala:向枚举添加方法

2024-01-24

我有一个像这样的简单枚举:

object ConditionOperator extends Enumeration {

  val Equal           = Value("equal")
  val NotEqual        = Value("notEqual")
  val GreaterOrEqual  = Value("greaterOrEqual")
  val Greater         = Value("greater")
  val LessOrEqual     = Value("lessOrEqual")
  val Less            = Value("less")

我想为每个枚举添加一个方法,以便我可以像这样使用它:

def buildSqlCondition(field: String, operator: ConditionOperator.Value, value: String ) = {
  val sqlOperator = operator.toSql
  [...]

因此,ConditionOperator.Equal.toSql 将返回“=”,而 ConditionOperator.NotEqual.toSql 将返回“”等...

但我不知道如何定义一个 toSql 方法,以便每个枚举都可以“看到”它自己的值并决定如何将自己转换为 sql 运算符...


这是我从过去有关该主题的各种搜索中找到的 Scala 2.9.2 的示例:

object Progress extends Enumeration {
    type enum = Value

    val READY = new ProgressVal {
      val isActive = false
      def myMethod: Any = { .. }
    }

    val EXECUTE = new ProgressVal {
      val isActive = true
      def myMethod: Any = { .. }
    }

    val COMPLETE = new ProgressVal {
      val isActive = false
      def myMethod: Any = { .. }
    }

    protected abstract class ProgressVal extends Val() {
      val isActive: Boolean
      def myMethod: Any
    }
    implicit def valueToProgress(valu: Value) = valu.asInstanceOf[ProgressVal]
}
type Progress = Progress.enum
  • The implicit是使其可用的关键。

  • The type enum and type Progress有点多余;我将它们包括进来是为了将这两个概念作为我发现有用的东西来呈现。


为了给予应有的认可,这个想法的最初想法来自 Sean Ross在回答一个与此重复的问题时 https://stackoverflow.com/questions/4346580/how-to-add-a-method-to-enumeration-in-scala?rq=1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala:向枚举添加方法 的相关文章

随机推荐

  • 如何从 PHP 中的日期时间戳获取时间和日期?

    我有一根像8 29 2011 11 16 12 AM 我想保存在变量中 例如 dat 8 29 2011 and tme 11 16 12 AM 如何实现这一目标 你能举个例子吗 E g
  • 无法向 Google 电子表格添加行

    我可以打开工作表并从标题中读取单元格 Google 电子表格中的第一行是标题 我已在 Google 电子表格中手动添加了 Name my val1 my val2 my val3 Other 这是相关的谷歌文档 https develope
  • 从 git svn clone 中排除文件

    我正在将 SVN 存储库迁移到 Git 并且我有 7000 多个二进制文件 我希望从一开始就将它们排除在导入之外并成为 Git 历史记录的一部分 而不是在之后清理它们 参考此question https stackoverflow com
  • 如何将元组的元组转换为其元素的计数?

    我有这个tuple元组 TupleOfTuples Venue1 Name1 Venue1 Name2 Venue2 Name3 Venue3 Name4 Venue3 Name5 Venue3 Name6 我想将其转换以获得如下结果 Ou
  • 如何在 WPF 中使用线程的结果?

    不幸的是 线程和任务对我来说是一个很大的谜 必须在与 DependencyObject 相同的线程上创建 DependencySource 我正在努力避免用户界面冻结 我的方法是在线程中完成工作 然后使用线程的输出设置属性 我有一个基类Jo
  • 重新选择 - 调用另一个选择器的选择器?

    我有一个选择器 const someSelector createSelector getUserIdsSelector ids gt ids map id gt yetAnotherSelector store id yetAnother
  • 克服公共项目的 GitHub API 速率限制?

    我有一个公共存储库 它是 Ansible 角色 此 Ansible 角色使用 GitHub API 来获取给定存储库的最新版本 我使用此元数据以便随后下载给定项目的最新版本二进制文件 不幸的是 当我在 Travis 中运行测试并偶尔在本地计
  • C:数组初始化段错误取决于大小和对 printf() 的调用

    另一个学生问我他的 C 代码有什么问题 我成功地重现了错误的行为 并且完全不知道为什么会出现段错误 考虑这个小小的 C 程序 include
  • 如何在 SwiftUI 中将 .enumerated() 与 ForEach 一起使用?

    这是一个按预期工作的简单 SwiftUI 列表 struct App View let items Array 100 200 var body some View List ForEach items id self index item
  • NSURLCache 在启动时是否持久?

    我正在为我的 iOS 应用程序寻找一种在启动后保持不变的网络缓存解决方案 我开始阅读有关 NSURLCache 的内容 但没有看到任何有关持久性的提及 有谁知道当您使用 NSURLCache 然后关闭并打开应用程序时它的行为如何 它持续吗
  • Phonegap 非调试模式和使用许可证密钥签名

    我已经在phonegap 中完成了一个应用程序 并想在谷歌应用程序商店上发布它 每次我下载 apk 文件时 它都处于调试模式 我如何使用密钥或密钥库对其进行签名 以将其上传到 Google Play 因为 Google 不会在调试模式下将其
  • 如何将道具从模板传递到反应根节点?

    我已经成功地在模板上的 div 上渲染我的组件 如下所示 索引 html load render bundle from webpack loader h1 Example h1 div div render bundle main 我的反
  • Objective-C:检查 OSX 中的防火墙状态?

    我的 Objective C 应用程序需要知道 OSX 中的防火墙是否正在运行 以便它可以告诉用户将其关闭或创建新规则 另外 是否可以直接从我的应用程序创建规则 以便用户永远不需要处理网络问题 John 我正在编写一个函数 可以为您提供 O
  • 为什么我无法从 Firebase 实时数据库检索用户名和密码

    我想使用存储在 Firebase 实时数据库中的用户名和密码登录 但我的代码不起作用 我包括我的数据库图片和代码 请帮我 这是数据库图像 这是我的主要活动代码MainActivity java databaseReference Fireb
  • jQuery 中有样式选择器吗?

    例如 如果我想选择它的 alt 是 Home 的每个图像 我可以执行以下操作 img alt Home 但是我怎样才能选择它们的每个元素width例如 在单个选择器中 CSS 属性为 750px EDIT 如果没有这样的选择器 是否有任何插
  • 在 Haskell 中查找函数的行号

    我正在尝试创建一个 Haskell 程序 它将一些简单的 2d 形状绘制到屏幕上 但是当您将鼠标悬停在每个形状上时 它会打印创建该形状的源代码行 为了做到这一点 我希望能够创建带有尺寸参数和指示行号的最终参数的形状 像这样的东西 rect1
  • 使用 Linq 获取第 N 个值

    如何使用 Linq 获取第 N 行 两列都是文本 所以我不能使用最小值 最大值 var nthItem items Skip n First
  • Android 语音识别作为 Android 4.1 和 4.2 上的服务

    我已经成功地让连续语音识别 使用 SpeechRecognizer 类 作为一项服务在所有 Android 版本 最高 4 1 上运行 我的问题是让它在版本 4 1 和 4 2 上工作 因为众所周知 存在一个问题 即 API 没有按照记录进
  • 使用 bufferedimages 将视频编码为 h264?

    我正在尝试使用 java 将大量缓冲图像 由我的应用程序动态创建的预先保存的图像 转换为视频 并希望有一个库可以帮助完成该过程 我探索了许多不同的选项 例如 jcodec 没有关于如何使用它的文档 Xuggler 由于与jdk5及其相关库的
  • scala:向枚举添加方法

    我有一个像这样的简单枚举 object ConditionOperator extends Enumeration val Equal Value equal val NotEqual Value notEqual val GreaterO