Scala常量的命名规范是什么?对此进行了简短的StackOverflow搜索,建议使用大写的驼峰命名法(下面的第一行),但我想再次确认。
val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94
哪种Scala风格被推荐?
Scala常量的命名规范是什么?对此进行了简短的StackOverflow搜索,建议使用大写的驼峰命名法(下面的第一行),但我想再次确认。
val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94
哪种Scala风格被推荐?
官方推荐的风格(我指的是官方)是第一种风格,驼峰式命名,首字母大写。这在《Scala编程》一书中由Odersky明确规定。
该风格也被标准库遵循,并且在语言语义上得到了一些支持:以大写字母开头的标识符在模式匹配中被视为常量。
(第二版107页第6.10节)
(这是一个对Daniel答案的补充评论,但我会将其发布为答案,以便获得语法高亮和格式化的好处。)
Daniel关于使用首字母大写的风格在语言语义上的重要性比我学习Scala时最初认为的更加微妙和重要。
考虑以下代码:
object Case {
val lowerConst = "lower"
val UpperConst = "UPPER"
def main(args: Array[String]) {
for (i <- Seq(lowerConst, UpperConst, "should mismatch.").map(Option.apply)) {
print("Input '%s' results in: ".format(i))
i match {
case Some(UpperConst) => println("UPPER!!!")
case Some(lowerConst) => println("lower!")
case _ => println("mismatch!")
}
}
}
}
天真地,我本以为这样可以匹配到所有情况。然而实际打印结果是:
Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
发生的情况是,case Some(lowerConst)
遮蔽了变量 lowerConst
并创建了一个同名的本地变量,每当评估包含字符串的 Some
时都会填充该变量。case Some(`lowerConst`) => println("lower!")
val UpperConst = "UPPER_CONST"
可以吗?还是应该写成val UpperConst = "UpperConst"
? - nir