まあ、それはそのようにspec'edされているので、私は思います。
これは、タプルの割り当てで、パターンマッチングの例です。最後の例、case
を使用して1を取り、今
val l = List((1,'a'), (2,'b'), (3,'c'))
var (n, c) = l(0)
for ((n, c) <- l) println(n+": "+c)
l(1) match {
case (n, c) => println(n+": "+c)
}
:
var PATTERN = ... // or val
for (PATTERN <- ...) ...
case PATTERN => ...
だから、すべてのこれらのケースは仕事:パターンマッチングは私がリコール3ヶ所で行われます。その例における
n
および
c
は、
ではなく、であり、同じ
n
および
c
が少し前に定義されていることに注意してください。パターンマッチでは、
case
ステートメントのエスケープの以前の定義を影にして、
という新しい値を識別子
n
と
c
に割り当てます。
for
の例でも同じことが起こりましたが、これは前に定義した
n
と
c
を変更しませんでした。
ここで、新しい識別子に新しい値を割り当てる代わりに、以前の値を上書きすることができます。これはパターンマッチングの仕組みではなく、まったく新しいルールを伴います。 Scalaは静かに人を不変性に向かわせるので、これを処理するだけの新しいルールを作成していないのは不合理ではないと思います。
チケットはhttps://issues.scala-lang.org/browse/SI-1324です(「SIPが必要です」) –