val A = 3
val (A) = (3)
两者都正确。但是:
val (A,B) = (2,3)
无法编译:
scala> val (A,B) = (2,3)
<console>:7: error: not found: value A
val (A,B) = (2,3)
^
<console>:7: error: not found: value B
val (A,B) = (2,3)
^
为什么?
答案 0 :(得分:13)
在第二个代码段中,它使用模式匹配来进行评估。
它被翻译成以下代码:
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>)