【问题标题】:Why can't Scala optimize this match to a switch?为什么 Scala 不能将此匹配优化为开关?
【发布时间】:2013-04-25 01:27:42
【问题描述】:

我有这个 pattern match 匹配 only 字节值但是当我添加 @switch 它说:

无法发出切换到@switch 注释匹配

我在这里错过了什么?

仅供参考,我已经尝试过但没有奏效:

  • 将此常量移动到 Java 接口并使用 public static final byte 字段(我也尝试将它们设为 int 而不是 byte
  • 在 Scala Message 伴随对象中将字段标记为 final val
  • 在伴随对象中将字段标记为@inline

我肯定迷路了。

【问题讨论】:

  • 我是impossible: a non-literal may prevent switch generation: this would not compile
  • 这篇文章包含一个死链接,使问题不完整,如果原始海报还在,你能解决这个问题吗
  • 现在它包含了正确的链接。

标签: scala optimization pattern-matching switch-statement constants


【解决方案1】:

scala-user 论坛上提供的答案是使 vals 成为最终版本并删除 Byte 注释:

object Message {
  final val Authentication = 'R'
  final val BackendKeyData = 'K'
  final val Bind = 'B'
  final val BindComplete = '2'
}

现在@switch 可以正确生成lookupswitch(它不会生成tableswitch,但已经足够好了)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2013-05-19
    • 2021-06-27
    • 2010-12-13
    • 1970-01-01
    • 2018-11-13
    • 2013-05-08
    相关资源
    最近更新 更多