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
}
无法编译,我的IDE中出现了奇怪的错误,但这是因为我正在使用gradle和许多遗留Java代码我要逐步更新。
我仍然不确定,为什么这不起作用。 Small的id为1,Medium为2。
现在,如果我这样匹配:
case s: MyObject.Size.small.id => println("Small")
符号ID无法解析。
为什么?
如果我手动添加1和2,一切都像魅力一样。
修改
我认为一个问题是.id从零开始,而我的大小从1开始(这里有意义,因为它是实际大小)
但仅此一点不可能是问题,可以吗?因为我无论如何都要与_匹配。
但我怎么能克服这个?
case MyObject.Size.small.id + 1 => println("Won't work!")
编辑:我的实际解决方案,感谢Sascha Kolberg
MyObject.Size(size+1) match
{
case MyObject.Size.SMALL => ...
...
}
答案 0 :(得分:5)
如果您使用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
}