Scala在枚举上匹配int

Sor*_*ona 2 enums scala pattern-matching

val size: Int = o.getSize

size match
{
    case MyObject.Size.small.id => println("Small")
    case MyObject.Size.medium.id => println("Medium")
    case _ => throw ne UnknownSizeException
}
Run Code Online (Sandbox Code Playgroud)

不会编译,我的IDE中出现了奇怪的错误,但这是因为我正在使用gradle和许多遗留Java代码我要逐步更新.

我仍然不确定,为什么这不起作用.小的id为1,Medium为2.

现在如果我像这样匹配:

  case s: MyObject.Size.small.id => println("Small")
Run Code Online (Sandbox Code Playgroud)

符号id无法解析.

这是为什么?

如果我手动添加1和2,一切都像魅力.

编辑

我认为一个问题是.id从零开始,而我的大小从1开始(这里有意义,因为它是实际大小)

但仅此一点不可能是问题,可以吗?因为我无论如何都要匹配_.

但是我怎么能克服这个呢?

case MyObject.Size.small.id + 1 => println("Won't work!")
Run Code Online (Sandbox Code Playgroud)

编辑:我的实际解决方案,感谢Sascha Kolberg

MyObject.Size(size+1) match
{
    case MyObject.Size.SMALL => ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

Sas*_*erg 6

如果你正在使用Enumeration你无法匹配,Enumeration.Value.id因为它是一个def和模式匹配你需要稳定的标识符,这基本上意味着val.

您在枚举值上匹配,请尝试以下操作:

MyObject.Size(size) match
{
  case MyObject.Size.small => println("Small")
  case MyObject.Size.medium => println("Medium")
  case _ => throw new UnknownSizeException
}
Run Code Online (Sandbox Code Playgroud)