Scala匹配/比较枚举

Tim*_*Tim 5 scala

我有一个枚举,我想在一个actor的模式匹配中使用.我没有得到我期望的东西,现在,我怀疑我错过了一些简单的东西.

我的枚举,

object Ops extends Enumeration {
  val Create = Value("create")
  val Delete = Value("delete")
}
Run Code Online (Sandbox Code Playgroud)

然后,我从String创建一个Ops:

val op = Ops.valueOf("create")
Run Code Online (Sandbox Code Playgroud)

在我的比赛中,我有:

case (Ops.Create, ...)
Run Code Online (Sandbox Code Playgroud)

但是Ops.Create似乎不等于ops.valueOf("create")

前者只是一个原子'创造'而后者是一些(创造)

希望这是足够的信息让别人告诉我我错过了什么...

谢谢

Rex*_*err 7

如果您只是想获取副本Create,那么您应该直接在代码中引用它:

val op = Ops.Create
Run Code Online (Sandbox Code Playgroud)

但是如果你从字符串中解析它,字符串可能包含垃圾,所以valueOf返回一个Option:

val op1 = Ops.valueOf("create")  // Some(Ops.Create)
val op2 = Ops.valueOf("delete")  // Some(Ops.Delete)
val op3 = Ops.valueOf("aljeaw")  // None
Run Code Online (Sandbox Code Playgroud)

现在,在你的比赛中你可以随身携带Option[Ops.Value]并寻找:

case(Some(Ops.Create),...)
Run Code Online (Sandbox Code Playgroud)

并且你有垃圾的内置鲁棒性作为输入.

  • 对于将来阅读此内容的人来说,"Enumeration.valueOf"已被弃用:请改用"withName" (9认同)