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

Scala 2.8 枚举ID,在匹配操作中不允许?,scala-2.8,Scala 2.8,我有一个枚举类,从一些成员中提取了“id”值,并将它们存储在Int变量中。这是否是个好主意不是问题 问题是,为什么我不能做到以下几点: 假设我有s:Int,它保存了这些id值中的一个。。。我想对实际的枚举值进行匹配。如下所示: 比赛{ QID.MEM_RD.id=>//什么 QID.MEM_WRT.id=>//还有别的吗 } 这似乎给了我一个“需要稳定标识符”的失败。所以我最终写的代码就像 if(s==QID.MEM_RD.id) //某物 else if(s==QID.MEM_WRT.ID)

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

问题是,为什么我不能做到以下几点:

假设我有s:Int,它保存了这些id值中的一个。。。我想对实际的枚举值进行匹配。如下所示:

比赛{ QID.MEM_RD.id=>//什么

QID.MEM_WRT.id=>//还有别的吗 }

这似乎给了我一个“需要稳定标识符”的失败。所以我最终写的代码就像

if(s==QID.MEM_RD.id) //某物 else if(s==QID.MEM_WRT.ID) //别的

所以。。对我来说,Scala有这么好的特性是有点奇怪的,但似乎迫使我回到一种更丑陋的编码风格——我更愿意使用它们的匹配特性

有什么想法吗?我想我可以重新构造以停止提取ID。。。但这只是match不允许这样的想法让我有点恼火

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


-杰伊

我想你可以在这种情况下使用if守卫

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