我发现这个谜题很有趣,特别是这段代码:
val (i, j): (Int, Int) = ("3", "4")
在 Scala 2.9.1 中运行时失败,但在 2.10 M3 编译时失败(这很棒)。我试图跟踪新的 Scala 版本中的内容,但我无法在这里连接这些点。什么改进导致了这种更精确的行为?
我发现这个谜题很有趣,特别是这段代码:
val (i, j): (Int, Int) = ("3", "4")
在 Scala 2.9.1 中运行时失败,但在 2.10 M3 编译时失败(这很棒)。我试图跟踪新的 Scala 版本中的内容,但我无法在这里连接这些点。什么改进导致了这种更精确的行为?
在 scala 2.10 中,模式匹配器已经完全重写,现在是虚拟化模式匹配器。阅读更多关于它的信息!
正在发生的事情是新的模式匹配器更容易增强和维护,因为它不是老鼠窝的代码。以下示例代码也应显示相同的更改:
("3", "4") match { case (i, j): (Int, Int) => /* whatever */ }
发生的事情是 Scala 在编译时理解该模式永远无法匹配。