2番目のコードスニペットでは、パターンマッチングを使用して評価を行います。
次のコードに変換されます。
val Tuple(A, B) = Tuple2(2,3)
Scalaがパターンマッチングを行っている場合、パターン内の大文字で始まる変数は定数値(またはシングルトンオブジェクト)と見なされるため、val (a, b) = (2, 3)
機能しますが、機能しませんval (A, B) = (2, 3)
。
ところで、最初のコードスニペットはパターンマッチングを使用していません。これは通常の変数の割り当てです。
Tuple1
明示的に使用すると、同じエラーが発生します。
scala> val Tuple1(Z) = Tuple1(3)
<console>:7: error: not found: value Z
val Tuple1(Z) = Tuple1(3)
ここにいくつかの興味深い例があります:
scala> val A = 10
A: Int = 10
scala> val B = 20
B: Int = 20
scala> val (A, x) = (10, 20)
x: Int = 20
scala> val (A, x) = (10, 30)
x: Int = 30
scala> val (A, x) = (20, 20)
scala.MatchError: (20,20) (of class scala.Tuple2$mcII$sp)
at .<init>(<console>:9)
at .<clinit>(<console>)