このパズル、具体的には次のコードが興味深いと思いました。
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 リリースで何が来るかを追跡しようとしていますが、ここで点をつなぐことができません。このより正確な動作につながった改善点は何ですか?
In scala 2.10, the pattern matcher has had a complete re-write and is now the virtualized pattern matcher. Read more about it!
進行中のことは、新しいパターン マッチャーは、ネズミの巣のようなコードではないため、拡張と保守がはるかに簡単だということです。次のコード例でも同じ変更が見られるはずです。
("3", "4") match { case (i, j): (Int, Int) => /* whatever */ }
何が起こっているかというと、Scala はコンパイル時にパターンが一致しないことを理解しています。