gpt4 book ai didi

scala - `val (A) = (3)`是正确的,但是`val (A,B)=(2,3)`编译不出来,为什么?

转载 作者:行者123 更新时间:2023-12-04 10:27:59 25 4
gpt4 key购买 nike

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)
^

为什么?

最佳答案

在第二个代码片段中,它使用模式匹配进行评估。

它被翻译成以下代码:

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>)

关于scala - `val (A) = (3)`是正确的,但是`val (A,B)=(2,3)`编译不出来,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10041546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com