Почему декларация val не соответствует соглашению об именовании констант scala? - PullRequest
2 голосов
/ 02 июля 2019

В Scala val используется для создания констант, а соглашение о присвоении имен для констант Scala заключается в использовании соглашения UpperCamelCase.(https://docs.scala -lang.org / style / naming-соглашений.html # constants-values-variable-and-method )

Обобщением для этого правила должны быть все значения valв UpperCamelCase.

, т.е. если переменная объявляется с использованием ключевого слова val, ее имя должно быть в UpperCamelCase.Однако на веб-сайте Scala я вижу примеры использования этого правила.

Что мне здесь не хватает?

Ответы [ 3 ]

4 голосов
/ 02 июля 2019

Проще говоря:

Константа имеет только одно значение во время работы программы.Он либо фиксируется во время компиляции, например, Pi, HoursInDay, либо является неизменяемым значением внутри верхнего уровня object.

A val является неизменяемой переменной.Его нельзя изменить после его установки, но при каждом вызове содержащего кода его можно устанавливать на разные значения.

1 голос
/ 02 июля 2019

val в Scala - это не только для определения констант , это также для определения значений .Таким образом, как указано в документации Scala: https://docs.scala -lang.org / style / naming-соглашений.html # constants-values-variable-and-method :

Для определения Константы Вы должны использовать стиль UpperCamelCase, где мы говорим эти элементы Константа , когда:

Если элемент final , неизменный и он принадлежит объекту пакета или объекту , его можно считать константой.

Например:

object Container {
  val MyConstant = ...
}

Пока метод , значение и переменная имена должны быть в lowerCamelCase стиле как:

val myValue = ...
def myMethod = ...
var myVariable = ...
1 голос
/ 02 июля 2019

Стиль кодирования предлагает final константы в верхнем регистре:

если элемент final , неизменяемый и принадлежит объекту пакета или объект, его можно считать константой

Например, обратите внимание, как scala.math.PI определяется как final:

@inline final val Pi = java.lang.Math.PI

val s внутри объектов являются окончательными в том смысле, что их нельзя переопределить, поэтому имеет смысл следующее, хотя MyConstant это явно не объявлено final:

object Container {
  val MyConstant = ...
}

Если val не является окончательным, стиль предлагает именование строчными буквами.

...