以下内容:
wal_keep_segments
是执行代码在编译时直接链接到匹配的argument match {
case A => **executed code**
...
的模式,还是“简单地”在运行时解决了某种强大的switch-case?
(我说的是离线编译,而不是JIT)
问题接近重复。我认为这个答案会更明智:
问题How is pattern matching in Scala implemented at the bytecode level?解释了模式匹配被转换为一组if和else,根据模式选择。
因此在编译时没有解决,因为:
argument
,w.rt参数类型(我希望它之所以这样做是因为我非常肯定它至少在某些情况下可以)
另外,查看问题is it possible to remove jumps with final boolean on java jit?,JIT可能会实际执行此操作。不确定它在实践中的效果如何(我希望它取决于具体情况),但如果确实如此,那么在编译时处理模式匹配并不是必需的。
答案 0 :(得分:2)
Scalac会将模式匹配编译为switch
(http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-3.html#jvms-3.10)或一系列if
/ else
语句。