2010-07-13 10 views
33

Guardando attraverso la classe Predef di Scala 2.8, trovo che c'è un metodo "localmente". Per quanto posso dire, è lo stesso di Predef.identity, tranne che per l'annotazione "@inline". A cosa serve e perché è abbastanza importante essere in Predef (e quindi utilizzabile ovunque in Scala)?Cosa fa Predef.locally e come è diverso da Predef.identity

+4

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

+0

Wow, in realtà ero parte di quel thread e ne ho dimenticato tutto. Se si effettua questa risposta anziché un commento, lo accetto e chiudo la domanda –

+2

Hmm. Mi interesserebbe ancora qual è la differenza tra 'identity' e' localmente '. – mkneissl

risposta

39

Si è discusso qui: http://www.scala-lang.org/node/3594

L'idea era quella di evitare l'errore del programmatore di confondere un 'penzoloni' di blocco locale con il modello di un oggetto/classe/trait.

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 

Se il programmatore vuole davvero quel blocco di stare da solo, potrebbe essere utilizzato locally:

object test { 
    object a 
    { 
    val x = 1 
    } 

    object b 

    locally { 
    val x = 1 
    } 
} 

Questo thread ha anche suggerito che il primo codice produrrebbe un avvertimento deprecazione. Questo non è stato ancora aggiunto.