繁体   English   中英

Scala常量的命名约定?

[英]Naming convention for Scala constants?

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

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

哪个Scala风格推荐?

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM