2010-08-19 20 views
17

El buen libro afirma que:¿Debo importar miembros de un objeto singleton a su clase complementaria en Scala?

Una clase de objeto y su compañero puede acceder a miembros privados de cada uno.

Quizás ingenuamente, entendí que una clase no necesitaba importar explícitamente los miembros de su objeto complementario. Es decir, lo siguiente funcionaría:

object Foo { 
    def bar = 4 
} 

class Foo { 
def foo = bar 
} 

Bueno, la razón por la que está leyendo esto es porque no es así. Entonces realmente necesito declarar algo como esto:

class Foo { 
    import Foo._ 

    def foo = bar 
} 

Respuesta

17

Sí, lo hace, tal como lo indica. Hay acceso, y hay alcance: lo que la clase/los objetos compañeros tienen es acceso, no alcance.

Es como declarar algo público vs privado - no pone a esos miembros en el alcance de todos, solo les da acceso a ellos.

+2

ver http://stackoverflow.com/q/23704769/86485 de algunos debates sobre _por qué_ este es el caso –

3

Sí (y quiero que mis 15 puntos por eso!)

Pero su expansión, sus alcances no se superponen, por lo que es necesaria la importación.

+1

Lo siento, fueron 53 segundos tarde :-) – lindelof

+1

¡Lo sé, maldición! Ese personaje de Daniel va a ser mi muerte. –

4

"puede tener acceso a los miembros privados" significa que las siguientes obras:

object Foo { 
    private def bar = 4 
} 

class Foo { 
    def foo = Foo.bar 
} 
+2

Si lo desea, puede restringir el acceso con 'private [this]' def bar = 4'. – retronym

Cuestiones relacionadas