枚举ID,在匹配操作中不允许?

时间:2010-08-21 20:00:36

标签: scala-2.8

我有一个Enumeration类,并从一些成员中提取“id”值并将它们存储在Int变量中。这不是一个好主意/不是问题。

问题是,为什么我似乎无法做到以下几点:

假设我有s:Int,其中包含其中一个id值...我想对实际的枚举值进行匹配。如下所示:

匹配{    QID.MEM_RD.id => //某事

QID.MEM_WRT.id => //别的什么    }

这似乎让我失败了“需要稳定的标识符”。所以我最终编写了像

这样的代码

if(s == QID.MEM_RD.id)      //某事    否则if(s == QID.MEM_WRT.ID)       //别的东西

所以...... Scala有这个不错的功能对我来说有点奇怪,但似乎迫使我回到更丑陋的编码风格 - 当我更愿意使用他们的匹配功能时。

有什么想法吗?我想我可以重组以停止提取ID ...但是这只是匹配不允许这让我感到烦恼的想法。

(注意:我不会尝试将id值永久存储在任何地方......只需在程序执行期间使用它们。)

-Jay

1 个答案:

答案 0 :(得分:0)

我认为你可以在这种情况下使用警卫。

s match {
  case a if (s == QID.MEM_RD.id) => println("you read!")
  case b if (s == QID.MEM_WRT.id) => println("you wrote!")
}

http://programming-scala.labs.oreilly.com/ch03.html#PatternMatching