我可以使用@switch和Enumerations吗?

保罗·德雷珀

我可以使用开关盒进行枚举模式匹配吗?

我试过了

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与Scala的不同Enumeration仍然没有运气。

@switch的模式匹配仅适用于基本类型?

我们

为了完成Regis的回答,Joshua Suereth在深度Scala中指出,要使Scala应用表开关优化,必须满足以下条件:

  1. 匹配的值必须是已知整数。
  2. 匹配的表达式必须为“简单”。它不能包含任何类型检查,if语句或提取器。
  3. 该表达式还必须在编译时具有其值。
  4. 应该有两个以上的案例陈述。

尽管Foo对象不是表开关优化的主题,但它不符合上述任何条件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以使用RestKit和Realm.io吗?

来自分类Dev

jekyll和sass; 我可以使用元吗?

来自分类Dev

我可以使用 Flexbox 创建背景和前景吗?

来自分类Dev

我可以使用通配符附加和订阅频道吗?

来自分类Dev

switch语句可以使用变量吗?

来自分类Dev

switch语句可以使用变量吗?

来自分类Dev

我可以使用python CSP吗?

来自分类Dev

我可以使用迭代器吗?

来自分类Dev

我可以使用通配符替换吗

来自分类Dev

我可以使用RTF格式吗?

来自分类Dev

骨骼可以使用我的插件吗?

来自分类Dev

可以使用XP和Ubuntu吗?

来自分类Dev

我可以使用MVC,Razor和HTML5启动我的项目吗

来自分类Dev

我可以使用 calc 和 var 根据宽度更改我的 div 高度吗?

来自分类Dev

TypeScript:我可以使用“ import * from”和“ require(*)”混合使用吗?

来自分类Dev

我可以使用Linux使用Sql Server,Office和C#吗?

来自分类Dev

我可以使用 nginx 在单个端口中同时使用 http auth 和 sso 登录吗

来自分类Dev

JavaScript Switch语句-可以使用案例值吗?

来自分类Dev

可以使用switch语句确定对象的类吗?

来自分类Dev

JavaScript Switch语句-可以使用案例值吗?

来自分类Dev

可以使用我心爱的%格式器实现可变的填充字符和可变的宽度吗?

来自分类Dev

我可以使用flex将<divs>放置在容器内的左侧和右侧吗?

来自分类Dev

我可以使用CSP将请求限制为https:和'self'吗?

来自分类Dev

我们可以使用Ionic 2和AngularJs 1吗?

来自分类Dev

我可以使用roslyn和新的.net项目格式在构建时创建类吗?

来自分类Dev

我可以使用Ubuntu安装程序分区工具(Win 8.1和Ubuntu 13.04)吗?

来自分类Dev

我可以使用自动布局为横向和纵向方向提供不同的约束吗?

来自分类Dev

我可以使用单个Play WebSocket播放广播消息和私人消息吗?

来自分类Dev

我可以使用wstring读取,解析和发出utf-8吗?

Related 相关文章

  1. 1

    我可以使用RestKit和Realm.io吗?

  2. 2

    jekyll和sass; 我可以使用元吗?

  3. 3

    我可以使用 Flexbox 创建背景和前景吗?

  4. 4

    我可以使用通配符附加和订阅频道吗?

  5. 5

    switch语句可以使用变量吗?

  6. 6

    switch语句可以使用变量吗?

  7. 7

    我可以使用python CSP吗?

  8. 8

    我可以使用迭代器吗?

  9. 9

    我可以使用通配符替换吗

  10. 10

    我可以使用RTF格式吗?

  11. 11

    骨骼可以使用我的插件吗?

  12. 12

    可以使用XP和Ubuntu吗?

  13. 13

    我可以使用MVC,Razor和HTML5启动我的项目吗

  14. 14

    我可以使用 calc 和 var 根据宽度更改我的 div 高度吗?

  15. 15

    TypeScript:我可以使用“ import * from”和“ require(*)”混合使用吗?

  16. 16

    我可以使用Linux使用Sql Server,Office和C#吗?

  17. 17

    我可以使用 nginx 在单个端口中同时使用 http auth 和 sso 登录吗

  18. 18

    JavaScript Switch语句-可以使用案例值吗?

  19. 19

    可以使用switch语句确定对象的类吗?

  20. 20

    JavaScript Switch语句-可以使用案例值吗?

  21. 21

    可以使用我心爱的%格式器实现可变的填充字符和可变的宽度吗?

  22. 22

    我可以使用flex将<divs>放置在容器内的左侧和右侧吗?

  23. 23

    我可以使用CSP将请求限制为https:和'self'吗?

  24. 24

    我们可以使用Ionic 2和AngularJs 1吗?

  25. 25

    我可以使用roslyn和新的.net项目格式在构建时创建类吗?

  26. 26

    我可以使用Ubuntu安装程序分区工具(Win 8.1和Ubuntu 13.04)吗?

  27. 27

    我可以使用自动布局为横向和纵向方向提供不同的约束吗?

  28. 28

    我可以使用单个Play WebSocket播放广播消息和私人消息吗?

  29. 29

    我可以使用wstring读取,解析和发出utf-8吗?

热门标签

归档