我觉得this puzzler很有意思,特别是这段代码:
val (i, j): (Int, Int) = ("3", "4")
在Scala 2.9.1中在运行时失败,但在编译时失败了w / 2.10 M3(这很棒)。我尝试跟踪新Scala版本中的内容,但我无法在此处连接点。什么改进导致了这种更精确的行为?
答案 0 :(得分:16)
在scala 2.10中,模式匹配器已经完成了重写,现在是虚拟化模式匹配器。 Read more about it!
答案 1 :(得分:10)
正在发生的事情是新的模式匹配器更容易增强和维护,因为它不是一个老鼠嵌套代码。以下示例代码也应显示相同的更改:
("3", "4") match { case (i, j): (Int, Int) => /* whatever */ }
Scala在编译时理解模式永远无法匹配。