[scala] 스칼라 상수에 대한 명명 규칙?

Scala 상수의 명명 규칙은 무엇입니까? StackOverflow에 대한 간단한 검색은 대문자 CamelCase (아래 첫 번째 줄)를 제안했지만 다시 확인하고 싶었습니다.

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

권장되는 Scala 스타일은 무엇입니까?



답변

공식적으로 추천하는 스타일 (공식적으로는 의미)은 첫 번째 스타일이고 첫 글자가있는 카멜 케이스는 대문자입니다. Odersky가 Scala 프로그래밍에 대해 명확하게 설명했습니다.

스타일 뒤에는 표준 라이브러리가 있으며 언어 의미론에서 일부 지원이 있습니다. 대문자로 시작하는 식별자는 패턴 일치에서 상수로 처리됩니다.

(Section 6.10, p. 107 in the second edition)


답변

(이것은 Daniel의 답변에 대한 부록 주석이지만 구문 강조 및 서식 지정의 이점을 위해 답변으로 게시하고 있습니다.)

초기 대문자를 사용하는 스타일이 언어 의미론에서 중요하다는 Daniel의 요점은 내가 스칼라를 배웠을 때 처음에 인정했던 것보다 더 미묘하고 중요합니다.

다음 코드를 고려하십시오.

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!")


답변

상수 이름은 대문자 카멜 케이스 여야합니다. 즉, 멤버가 최종적이고 변경 불가능하며 패키지 객체 나 객체에 속 하면 상수로 간주 될 수 있습니다. …. 메소드, 값 및 변수 이름은 소문자 카멜로 입력 해야합니다.

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


답변