【发布时间】:2016-09-14 21:45:04
【问题描述】:
我是 Scala 新手。当我通过阅读其他人编写的 Scala 代码来学习它时,我发现 Scala 代码与其他语言不同的最显着特征之一就是它的模式匹配。
在感受到它带来的便利性和表现力的同时,我不禁好奇它背后的潜在性能成本——一般来说match有多快?
首先,没有“高级”功能,例如构造函数的匹配参数,IMO Scala 中的match 是其他语言中的switch-case 的对应物。例如,
color match {
0 => println "color is red!"
1 => println "color is green!"
2 => println "color is blue!"
}
作为一个新手,我想知道上面的代码是否和if-else语句中的等效代码一样快?
其次,现在收回那些“高级”功能,例如:
expr match {
Animal(name) => ...
Animal(name, age) => ...
Animal(_, _, id) => ...
}
至于上面的代码或者match的其他特性(列表匹配、配对匹配等),我很好奇Scala是如何实现这些花哨的用法的?最重要的是,我期望这些代码有多快? (比如说,它们仍然和第一种情况下的match 一样快吗?或者可能稍微慢一点?或者由于使用了反射等技术而变得非常慢?)
提前致谢!
【问题讨论】:
-
取决于上下文:在涉及常量的有限情况下,它就像一个 java 开关。在涉及内置案例类模式的模式匹配的情况下,它只是一个实例检查,然后是字段的成员查找。在一般情况下,会调用完整的
unapply方法(是的,这会更慢)。
标签: scala