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)
如果你正在使用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)