2012-06-25 13 views
5

W jaki sposób deklarujesz stałe czasowe kompilacji w Scali? W języku C#, jeśli deklarująScala: Stałe kompilacji

const int myConst = 5 * 5; 

myConst jest wyłożona w-jako dosłowne 25. Czy:

final val myConst = 5 * 5 

odpowiednik czy istnieje jakiś inny mechanizm/składnia?

Odpowiedz

8

Tak, final val jest prawidłową składnią, z Daniel's caveats. Jednak w odpowiednim stylu Scala twoje stałe powinny być wielkimi literami z wielką pierwszą literą.

Rozpoczęcie od dużej litery jest ważne, jeśli chcesz używać stałych w dopasowywaniu wzorców. Pierwsza litera to sposób, w jaki kompilator Scala rozróżnia stałe wzorce i zmienne wzorce. Zobacz rozdział 15.2 z Programming in Scala.

Jeśli val lub Singleton obiekt nie zaczyna się wielką literą, aby używać go jako wzorzec dopasowania należy ująć ją w backticks (``)

x match { 
    case Something => // tries to match against a value named Something 
    case `other` => // tries to match against a value named other 
    case other =>  // binds match value to a variable named other 
} 
5

final val to sposób na zrobienie tego. Kompilator utworzy wtedy stałą kompilacji, jeśli będzie w stanie.

Przeczytaj komentarz Daniela poniżej, aby uzyskać szczegółowe informacje na temat tego, co oznacza "jeśli może".

+14

Zapomniałaś dwa ważne punkty: musi być statycznie rozwiązany w czasie kompilacji - nie jestem pewien, czy Scala wykonuje dosłowną arytmetykę w czasie kompilacji - i bardzo łatwo się pomylić, nie może mieć typu. Jeśli zadeklarujesz go jako 'final val myConst: Int = 5', nie będzie on traktowany jako stała. –

+1

Czy masz odniesienie dotyczące _it nie może mieć typu_? –