2010-08-19 11 views
17

The Good Book dichiara che:Devo importare membri di un oggetto singleton nella sua classe companion in Scala?

Una classe e il suo oggetto associato può accedere a vicenda membri privati.

Forse ingenuamente, ho preso questo nel senso che una classe non ha bisogno di importare esplicitamente i membri dal suo oggetto compagno. Ad esempio, il seguente funzionerebbe:

object Foo { 
    def bar = 4 
} 

class Foo { 
def foo = bar 
} 

Bene, il motivo per cui stai leggendo questo è che non è così. Quindi ho davvero bisogno di dichiarare qualcosa del genere:

class Foo { 
    import Foo._ 

    def foo = bar 
} 

risposta

17

Sì, lo fai, proprio come dici tu. C'è l'accesso, e c'è l'ambito: ciò che la classe/gli oggetti associati hanno è l'accesso, non l'ambito.

È come dichiarare qualcosa di pubblico o privato - non porta quei membri nella portata di tutti, basta dargli accesso.

+2

see http://stackoverflow.com/q/23704769/86485 per qualche ulteriore discussione su _perché_ questo è il caso –

3

Sì (e voglio che i miei 15 punti per questo!)

Ma ad espandersi, i loro scopi non si sovrappongono, per cui l'importazione è necessario.

+1

Siamo spiacenti, si erano in ritardo di 53 secondi :-) – lindelof

+1

Lo so, dannazione! Quel personaggio di Daniel sarà la mia morte. –

4

"possono accedere ai membri privati" significa che le seguenti opere:

object Foo { 
    private def bar = 4 
} 

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

Se lo si desidera, è possibile limitare l'accesso con 'private [this]' def bar = 4'. – retronym

Problemi correlati