2010-07-13 7 views
33

Wenn ich durch die Scala 2.8 Predef-Klasse schaue, finde ich, dass es eine Methode "lokal" gibt. Soweit ich das beurteilen kann, ist es dasselbe wie Predef.identity, abgesehen von der Annotation "@inline". Wofür ist es da und warum ist es wichtig genug, um in Predef zu sein (und somit überall in Scala nutzbar zu sein)?Was macht Predef.locally, und wie unterscheidet es sich von Predef.identity

+4

Siehe: http://www.scala-lang.org/node/3594 – retronym

+0

Wow, ich war eigentlich ein Teil dieses Threads und vergaß alles darüber. Wenn Sie dies als Antwort und nicht als Kommentar verwenden, akzeptiere ich es und schließe die Frage –

+2

Hmm. Ich wäre immer noch interessiert, was der Unterschied zwischen "Identität" und "lokal" ist. – mkneissl

Antwort

39

Es wird hier diskutiert: http://www.scala-lang.org/node/3594

Die Idee, die Programmierer Fehler zu verwechseln einen ‚Schlenker‘ lokalen Block mit der Vorlage eines Objekt/Klasse/Merkmale zu vermeiden ist.

object test { 
    object a 
    { 
    val x = 1 
    } 

    object b 

    { // oops, extra newline disassociates this block with the object b 
    val x = 1 
    } 
} 
test.a.x 
//test.b.x // doesn't compile 

Wenn der Programmierer will wirklich, dass Block allein stehen, verwendet werden locally könnte:

object test { 
    object a 
    { 
    val x = 1 
    } 

    object b 

    locally { 
    val x = 1 
    } 
} 

Dieser Thread ist auch, dass der erste Code eine deprecation Warnung erzeugen würde, vorgeschlagen. Dies wurde noch nicht hinzugefügt.

Verwandte Themen