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}