gpt4 book ai didi

scala - 我可以使用@switch 和枚举吗?

转载 作者:行者123 更新时间:2023-12-01 16:22:13 26 4
gpt4 key购买 nike

我可以使用 switch-case 对枚举进行模式匹配吗?

我试过

import scala.annotation.switch

object Foo extends Enumeration {
val First = Value
val Second = Value
val Third = Value
}

object Main {
def foo(x: Foo.Value) = (x: @switch) match {
case Foo.First => 1
case Foo.Second => 2
case Foo.Third => 3
}
}

但收到以下警告(Scala 2.11.4):
warning: could not emit switch for @switch annotated match
def foo(x: Foo.Value) = (x: @switch) match {

然后我尝试在 Java 中定义枚举,因为 Java 的 enum s 与 Scala 的不同 Enumeration .仍然没有运气。

@switch模式匹配仅适用于原始类型?

最佳答案

要完成 Regis 的回答,在 Scala In Depth 中,Joshua Suereth 指出,Scala 必须满足以下条件才能应用 tableswitch 优化:

  • 匹配的值必须是已知整数。
  • 匹配的表达式必须是“简单的”。它不能包含任何类型检查、if 语句或提取器。
  • 表达式还必须在编译时具有可用的值。
  • 应该有两个以上的 case 语句。

  • Foo 对象不符合上述任何标准,尽管它不是 tableswitch 优化的主题。

    关于scala - 我可以使用@switch 和枚举吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27772434/

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