26

我发现这个谜题很有趣,特别是这段代码:

val (i, j): (Int, Int) = ("3", "4")

在 Scala 2.9.1 中运行时失败,但在 2.10 M3 编译时失败(这很棒)。我试图跟踪新的 Scala 版本中的内容,但我无法在这里连接这些点。什么改进导致了这种更精确的行为?

4

2 回答 2

16

在 scala 2.10 中,模式匹配器已经完全重写,现在是虚拟化模式匹配器阅读更多关于它的信息!

于 2012-05-17T07:01:30.373 回答
10

正在发生的事情是新的模式匹配器更容易增强和维护,因为它不是老鼠窝的代码。以下示例代码也应显示相同的更改:

("3", "4") match { case (i, j): (Int, Int) => /* whatever */ }

发生的事情是 Scala 在编译时理解该模式永远无法匹配。

于 2012-05-17T13:31:58.450 回答