Соглашение об именах для констант 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