gpt4 book ai didi

Scala 在枚举上匹配 int

转载 作者:行者123 更新时间:2023-12-02 08:26:41 33 4
gpt4 key购买 nike

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 以 0 开头,而我的大小以 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
}

关于Scala 在枚举上匹配 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618355/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com