2012-06-25 3 views
5

Wie deklariert man in Scala Kompilierzeitkonstanten? wenn Sie in C# erklärenScala: Kompiliere Zeitkonstanten

const int myConst = 5 * 5; 

myConst in ausgekleideten als die wörtliche 25. ist:

final val myConst = 5 * 5 

gleichwertig oder gibt es einen anderen Mechanismus/Syntax?

Antwort

8

Ja, final val ist die richtige Syntax mit Daniel's caveats. Im richtigen Scala-Stil sollten Ihre Konstanten jedoch camelCase mit einem Großbuchstaben sein.

Beginnen Sie mit einem Großbuchstaben, wenn Sie Ihre Konstanten im Mustervergleich verwenden möchten. Der erste Buchstabe unterscheidet den Scala-Compiler zwischen konstanten Mustern und variablen Mustern. Siehe Abschnitt 15.2 von Programming in Scala.

Wenn ein val oder Singleton-Objekt nicht mit einem Großbuchstaben beginnen, es als Übereinstimmungsmuster verwenden Sie es in Backticks einschließen muss (``)

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 ist der Weg, es zu tun. Der Compiler wird dann eine Kompilierzeitkonstante erstellen, wenn es möglich ist.

Lesen Sie Daniels Kommentar unten für Details darüber, was "wenn es möglich ist" bedeutet.

+14

Sie zwei wichtige Punkte vergessen haben: Es muss statisch sein zur Kompilierzeit aufgelöst - ich bin nicht sicher, ob Scala während der Kompilierzeit eine Literalarithmetik ausführt - und sehr leicht, sich zu verirren, _kann keinen Typ_ haben. Wenn Sie es als 'final val myConst: Int = 5' deklarieren, wird es nicht als Konstante behandelt. –

+1

Haben Sie eine Referenz in Bezug auf _Es darf keinen Typ_ haben? –