質問
次のようにタプルを割り当てることができます:
var (min, max) = (1, 2)
しかし、次のように再割り当てすることはできません
(min, max) = (1, 3) //compiler error: ';' expected but '=' found
代わりに、私はやらなければならないようです:
min = 1
max = 3
前者が機能しないのに後者が機能するのはなぜですか?
解決
まあ、それはそのように指定されたからだと思う。
これ、タプルの割り当ては、パターンマッチングの例です。パターンマッチングは、次の3つの場所で発生します。
var PATTERN = ... // or val
for (PATTERN <- ...) ...
case PATTERN => ...
これらのケースはすべて機能します:
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)
}
今、最後の例、 case
を使用する例を取り上げます。この例の n
と c
は、 n と c
が同じ n ではないことに注意してください。少し前に定義しました。パターンマッチにより、値が new 識別子 n
および c
に割り当てられ、 case <のescopeの以前の定義が隠されます/ code>ステートメント。同じことが
for
の例でも発生し、以前に定義された n
および c
は変更されませんでした。
今、あなたがしたいのは、新しい値を新しい識別子に割り当てるのではなく、以前の値を上書きすることです。これはパターンマッチングの仕組みではありません。つまり、パターンマッチングを実行するには、まったく新しいルールが必要になります。 Scalaは人々を不変性に優しく突きつけているので、これを処理するためだけに新しいルールを作成しなかったのは不合理ではないと思います。
所属していません StackOverflow