Scala常量的命名约定?

时间:2012-03-16 22:50:14

标签: scala naming-conventions constants

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

val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94

推荐哪种Scala样式?

3 个答案:

答案 0 :(得分:118)

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

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

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

答案 1 :(得分:40)

(这是对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)会影响val lowerConst并创建一个同名的局部变量,只要评估包含字符串的Some,就会填充该变量。< / p>

有一些方法可以解决这个问题,但最简单的方法是遵循风格指南不断命名。

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

case Some(`lowerConst`) => println("lower!")

答案 2 :(得分:7)

  

常量名称应该在上层驼峰的情况下。也就是说,如果是会员   是final,immutable和它属于一个包对象或一个对象,   它可能被视为常数....方法,值和变量名称应该在较低的驼峰

     

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