質問

次のようにタプルを割り当てることができます:

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は人々を不変性に優しく突きつけているので、これを処理するためだけに新しいルールを作成しなかったのは不合理ではないと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top