Scala Language
Scopo
Ricerca…
introduzione
Scope on Scala definisce da dove si può accedere a un valore ( def
, val
, var
o class
).
Sintassi
- dichiarazione
- dichiarazione privata
- [questa] dichiarazione privata
- dichiarazione privata [fromWhere]
- dichiarazione protetta
- protetta [daWhere] dichiarazione
Ambito pubblico (predefinito)
Per impostazione predefinita, l'ambito è public
, il valore è accessibile da qualsiasi luogo.
package com.example {
class FooClass {
val x = "foo"
}
}
package an.other.package {
class BarClass {
val foo = new com.example.FooClass
foo.x // <- Accessing a public value from another package
}
}
Un ambito privato
Quando l'ambito è privato, è possibile accedervi solo dalla classe corrente o da altre istanze della classe corrente.
package com.example {
class FooClass {
private val x = "foo"
def aFoo(otherFoo: FooClass) {
otherFoo.x // <- Accessing from another instance of the same class
}
}
class BarClass {
val f = new FooClass
f.x // <- This will not compile
}
}
Un ambito specifico del pacchetto privato
È possibile specificare un pacchetto in cui è possibile accedere al valore privato.
package com.example {
class FooClass {
private val x = "foo"
private[example] val y = "bar"
}
class BarClass {
val f = new FooClass
f.x // <- Will not compile
f.y // <- Will compile
}
}
Scopo privato dell'oggetto
L'ambito più restrittivo è l'ambito "oggetto-privato" , che consente di accedere a tale valore solo dalla stessa istanza dell'oggetto.
class FooClass {
private[this] val x = "foo"
def aFoo(otherFoo: FooClass) = {
otherFoo.x // <- This will not compile, accessing x outside the object instance
}
}
Ambito protetto
L'ambito protetto consente l'accesso al valore da qualsiasi sottoclasse della classe corrente.
class FooClass {
protected val x = "foo"
}
class BarClass extends FooClass {
val y = x // It is a subclass instance, will compile
}
class ClassB {
val f = new FooClass
f.x // <- This will not compile
}
Ambito protetto da pacchetto
L'ambito protetto del pacchetto consente di accedere al valore solo da qualsiasi sottoclasse in un pacchetto specifico.
package com.example {
class FooClass {
protected[example] val x = "foo"
}
class ClassB extends FooClass {
val y = x // It's in the protected scope, will compile
}
}
package com {
class BarClass extends com.example.FooClass {
val y = x // <- Outside the protected scope, will not compile
}
}
Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow