Scala Language
strekking
Zoeken…
Invoering
Scope op Scala definieert van waar een waarde ( def
, val
, var
of class
) toegankelijk is.
Syntaxis
- verklaring
- privé verklaring
- private [deze] verklaring
- private [fromWhere] verklaring
- beschermde verklaring
- beschermde [fromWhere] verklaring
Openbaar (standaard) bereik
Het bereik is standaard public
, de waarde is overal toegankelijk.
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
}
}
Een privébereik
Wanneer de scope privé is, is deze alleen toegankelijk vanuit de huidige klasse of andere instanties van de huidige klasse.
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
}
}
Een private pakket-specifieke scope
U kunt een pakket opgeven waar de privéwaarde kan worden geopend.
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
}
}
Object privébereik
Het meest beperkende bereik is het "object-private" bereik, waardoor alleen die waarde toegankelijk is vanuit dezelfde instantie van het object.
class FooClass {
private[this] val x = "foo"
def aFoo(otherFoo: FooClass) = {
otherFoo.x // <- This will not compile, accessing x outside the object instance
}
}
Beschermde scope
Met het beveiligde bereik is de waarde toegankelijk vanuit alle subklassen van de huidige klasse.
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
}
Pakket beschermd bereik
Met de pakketbeschermde scope is de waarde alleen toegankelijk vanuit elke subklasse in een specifiek pakket.
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow