Соглашение об именах для констант Scala?
Что такое соглашение об именах для констант Scala? Краткий поиск в StackOverflow предлагает верхний регистр CamelCase (первая строка ниже), но я хотел дважды проверить.
val ThisIsAConstant = 1.23
val THIS_IS_ANOTHER_CONSTANT = 1.55
val thisIsAThirdConstant = 1.94
Какой стиль рекомендуется Scala?
Ответы
Ответ 1
Официально рекомендуемый стиль (и я имею в виду официально) - это первый стиль, верблюд с первой буквой - это верхний регистр. Это ясно описано Одерским в Программе в Scala.
Стиль также сопровождается стандартной библиотекой и имеет некоторую поддержку в семантике языка: идентификаторы, начинающиеся с верхнего регистра, рассматриваются как константы в сопоставлении с образцом.
(раздел 6.10, стр. 107 во втором издании)
Ответ 2
(Это комментарий дополнения к 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
, содержащая строку.
Есть, правда, способы обойти его, но самым простым является следовать руководству по стилю для постоянного именования.
Если вы не можете следовать соглашению об именах, то, как @reggoodwin указывает в комментариях ниже, вы можете поместить имя переменной в тики, например
case Some(`lowerConst`) => println("lower!")
Ответ 3
Имена констант должны быть в верхнем верблюжьем корпусе. То есть, если член является окончательным, неизменным и принадлежит к объекту пакета или объекту, его можно считать константой.... Метод, значения и имена переменных должны быть в нижнем верблюжьем случае
http://docs.scala-lang.org/style/naming-conventions.html#constants-values-variable-and-methods