2013-04-10 36 views
2

scala如何处理match ing?它只是在字节码级别转化为编译器分支的语法糖,还是隐藏在封面下的一些巧妙的技巧?在Scala中匹配 - 性能?

+2

类似的:http://stackoverflow.com/questions/754166/how-is-pattern-matching-in-scala-implemented-at-bytecode-level – 2013-04-10 22:04:23

+0

虽然这个旧的问题是明确相关和详细,请注意,模式匹配代码生成已被重写并在2.10中得到显着改进。例如,用于某种图案嵌套的指数(代码)空间的可能性已被消除。此外,我理解使用提取器(而不是案例类)多年来已修复的许多涉及模式匹配的错误。所以四年前的答案可能包含当前编译器的重大不准确之处。 – 2013-04-10 23:15:52

回答

3

匹配整数值(例如,Int,Char)与常量的匹配一般通过字节码翻译为TableSwitch(O(1)查找时间通过索引数组)或LookUpSwitch(O(log n)查找时间)指令。如果你有一个可变模式或通配符模式作为全部分支,情况也是如此。

您可以使用@switch注释来确保实际发生这种情况。

对于非整数值,可用优化稍微有限;然而,据我了解编译器代码,编译器至少会检查常见的子条件(它记住)和共享前缀。