Scala常量的命名约定?

gra*_*tur 91 scala constants naming-conventions

Scala常量的命名约定是什么?简单搜索StackOverflow建议大写CamelCase(下面的第一行),但我想仔细检查.

val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94
Run Code Online (Sandbox Code Playgroud)

哪个Scala风格推荐?

Dan*_*ral 120

官方推荐的风格(我的意思是官方的)是第一个风格,第一个字母的驼峰情况是大写.它是由Odersky在Scala编程中清楚地阐述的.

样式后面还有标准库,并且在语言语义方面有一些支持:以大写​​字母开头的标识符在模式匹配中被视为常量.

(第二版第6.10节,第107页)

  • @Matthias那不包括常数.一个可怕的疏忽,但是,相信我,不仅这不正确,而且只要你在模式匹配中使用它,第三种风格_会导致问题_. (3认同)

Lei*_*and 41

(这是对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!")
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

天真地我会期望达到比赛中的所有情况.相反它打印:

Input 'Some(lower)' results in: lower!
Input 'Some(UPPER)' results in: UPPER!!!
Input 'Some(should mismatch.)' results in: lower!
Run Code Online (Sandbox Code Playgroud)

发生了什么是case Some(lowerConst)val 的阴影lowerConst并创建了一个同名的局部变量,它将在任何时候Some包含一个字符串进行评估.

无可否认地有办法解决这个问题,但最简单的方法是遵循风格指南来不断命名.

如果您不能遵循命名约定,那么正如@reggoodwin在下面的注释中指出的那样,您可以将变量名称放在ticks中,就像这样

case Some(`lowerConst`) => println("lower!")
Run Code Online (Sandbox Code Playgroud)

  • 如果 case Some(lowerConst) 遮蔽 val lowerConst,为什么 case Some(UpperConst) 不遮蔽 val UpperConst ? (3认同)

sam*_*est 7

常量名称应该在上部驼峰的情况下.也就是说,如果成员是final,immutable并且它属于一个包对象或一个对象,它可以被认为是一个常量....方法,值和变量名称应该在较低的camel情况下

http://docs.scala-lang.org/style/naming-conventions.html#constants-values-variable-and-methods