2010-07-13 12 views
33

Al mirar a través de la clase Predef de Scala 2.8, encuentro que hay un método "localmente". Por lo que puedo decir, es lo mismo que Predefidentidad, excepto por tener la anotación "@inline". ¿Para qué sirve y por qué es lo suficientemente importante como para estar en Predef (y, por lo tanto, utilizable en cualquier lugar de Scala)?Qué hace Predef.locally, y cómo es diferente de Predefidentity

+4

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

+0

Wow, en realidad yo era parte de ese hilo y me olvidé por completo. Si hace de esto una respuesta en lugar de un comentario, lo aceptaré y cerraré la pregunta –

+2

Hmm. Todavía me interesaría saber cuál es la diferencia entre 'identity' y' local'. – mkneissl

Respuesta

39

Se discute aquí: http://www.scala-lang.org/node/3594

La idea era evitar el error del programador de confundir un bloqueo local 'colgando' con la plantilla de un objeto/clase/rasgo.

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 

Si el programador realmente quiere ese bloque a autolimpiante, locally podrían utilizarse:

object test { 
    object a 
    { 
    val x = 1 
    } 

    object b 

    locally { 
    val x = 1 
    } 
} 

Este hilo también sugirió que el primer código produciría una advertencia desaprobación. Esto aún no ha sido agregado.

Cuestiones relacionadas