在 Scala 中使用稳定标识符的后果是什么?



在 Scala 中,我听说如果标识符以大写字母开头或用反引号括起来,它就是"稳定的"。标识符在 Scala 中稳定意味着什么?这有什么副作用?最后,这是否与建议常量(如 Java 中的static final常量(以大写字母开头的约定有关?

根据语言参考:

稳定标识符是以标识符结尾的路径。

反引号与此术语没有直接关系。需要反引号来包装本身不是词法有效标识符的内容,例如关键字。

您可能正在考虑一种稳定的标识符模式

为了解决与变量模式的语法重叠,稳定的标识符模式可能不是以小写字母开头的简单名称。但是,可以将这样的变量名称括在反引号中;然后将其视为稳定的标识符模式。

这说明的是如果您在匹配模式表达式中使用"正常"小写变量名称会发生什么。结果是匹配将始终成功,并将结果绑定到绑定(这可能会隐藏要使用的绑定(。

若要使匹配项使用现有变量绑定,可以使用反引号/反引号。

这些都与与常量命名相关的 Java 约定无关。这只是一个惯例。

与不稳定标识符匹配的任何字符串的示例,(不稳定标识符的后果(

val highPriority = "High"
val lowPriority = "Low"
"i dont match lowPriority, but this pattern matches to first case" match {
case lowPriority => println("lowPriority")
case _ => println("highPriority")
}

执行第一个案例lowPriority,但应该打印第二个案例。这是因为case lowPriority创建了一个与任何内容匹配的变量lowPriority

1(将反引号(阴影(添加到标识符lowPriority,使与现有标识符的确切值进行比较 低优先级,这就是您想要的。

val highPriority = "High"
val lowPriority = "Low"
"i dont match lowPriority" match {
case `lowPriority` => println("LowPriority")
case _ => println("HighPriority")
}

2(或者大写标识符也可以解决问题。

val HighPriority = "High"
val LowPriority = "Low"
"i dont match LowPriority, prints second case" match {
case LowPriority => println("LowPriority")
case _ => println("HighPriority")
}

打印HighPriority

相关链接

https://www.scala-lang.org/files/archive/spec/2.11/03-types.html#paths

为什么变量不能是稳定的标识符?

在 scala 模式匹配中,什么是可变模式的可疑阴影?

为什么 Scala 中的模式匹配不适用于变量?

最新更新