Scala Language
Zakres
Szukaj…
Wprowadzenie
Zakres na Scali określa, gdzie można uzyskać dostęp do wartości ( def
, val
, var
lub class
).
Składnia
- deklaracja
- prywatne oświadczenie
- prywatna [niniejsza] deklaracja
- prywatna deklaracja [fromWhere]
- deklaracja chroniona
- chroniona deklaracja [fromWhere]
Zakres publiczny (domyślny)
Domyślnie zakres jest public
, do wartości można uzyskać dostęp z dowolnego miejsca.
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
}
}
Prywatny zakres
Gdy zakres jest prywatny, można uzyskać do niego dostęp tylko z bieżącej klasy lub innych instancji bieżącej klasy.
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
}
}
Prywatny zakres specyficzny dla pakietu
Możesz określić pakiet, w którym można uzyskać dostęp do wartości prywatnej.
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
}
}
Zakres prywatny obiektu
Najbardziej restrykcyjnym zakresem jest zakres „obiekt-prywatny” , który umożliwia dostęp do tej wartości tylko z tej samej instancji obiektu.
class FooClass {
private[this] val x = "foo"
def aFoo(otherFoo: FooClass) = {
otherFoo.x // <- This will not compile, accessing x outside the object instance
}
}
Zakres chroniony
Chroniony zakres umożliwia dostęp do wartości z dowolnej podklasy bieżącej klasy.
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
}
Zakres chroniony pakietu
Zakres chroniony pakietu umożliwia dostęp do wartości tylko z dowolnej podklasy w określonym pakiecie.
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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow