Scala中的多常数赋值

Scala中的多常数赋值,scala,variable-assignment,Scala,Variable Assignment,你知道为什么我可以用元组分配多个变量,而不是多个常量吗 scala> val (myVar1, myVar2) = (1, 2) myVar1: Int = 1 myVar2: Int = 2 scala> val (MyConst1, MyConst2) = (1, 2) <console>:7: error: not found: value MyConst1 val (MyConst1, MyConst2) = (1, 2)

你知道为什么我可以用元组分配多个变量,而不是多个常量吗

scala> val (myVar1, myVar2) = (1, 2)
myVar1: Int = 1
myVar2: Int = 2

scala> val (MyConst1, MyConst2) = (1, 2)
<console>:7: error: not found: value MyConst1
       val (MyConst1, MyConst2) = (1, 2)
            ^
<console>:7: error: not found: value MyConst2
       val (MyConst1, MyConst2) = (1, 2)
                      ^
scala>val(myVar1,myVar2)=(1,2)
myVar1:Int=1
myVar2:Int=2
scala>val(MyConst1,MyConst2)=(1,2)
:7:错误:未找到:值MyConst1
val(MyConst1,MyConst2)=(1,2)
^
:7:错误:未找到:值MyConst2
val(MyConst1,MyConst2)=(1,2)
^

我认为实际上这只是一个命名约定的问题,但Scala似乎对首字母大写/小写的标识符有不同的处理方式。

正如Samar在他的评论中所建议的那样,由于您声明了多个变量,因此涉及到模式匹配,这些大写标识符实际上被视为类,正如您的REPL错误所示,找不到

scala> var (Const1, Const2) = (1, 2)
<console>:7: error: not found: value Const1    // <- Const1 class not found
       var (Const1, Const2) = (1, 2)
            ^
<console>:7: error: not found: value Const2   // <- Const2 class not found
       var (Const1, Const2) = (1, 2)    
                    ^

scala> var (const1, const2) = (1, 2)   // <- const1, const2 not treated as classes in this case
const1: Int = 1
const2: Int = 2
scala>var(常数1,常数2)=(1,2)
:7:错误:未找到:值Const1/提到了
varid
(查看例如
简单模式
)。现在在
变量中
定义为

lower            ::=  ‘a’ | … | ‘z’ // and Unicode category Ll
...
varid            ::=  lower idrest

这是“值定义的左侧”上的模式匹配示例,如回答“以大写字母开头的标识符在模式匹配中被视为常量”:不需要类,常量也可以工作。它们根本不被当作绑定的变量<代码>val One=1;1匹配{case One=>true;case{=>false}