Scala 在枚举上匹配 int
Scala match int on enumeration
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 的 id 为 2。
现在如果我这样匹配:
case s: MyObject.Size.small.id => println("Small")
symbol id cannot be resolved.
这是为什么?
如果我手动添加 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 => ...
...
}
如果您使用 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
}
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 的 id 为 2。
现在如果我这样匹配:
case s: MyObject.Size.small.id => println("Small")
symbol id cannot be resolved.
这是为什么?
如果我手动添加 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 => ...
...
}
如果您使用 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
}