Scala Language
Omfattning
Sök…
Introduktion
Scope på Scala definierar varifrån ett värde ( def
, val
, var
eller class
) kan nås.
Syntax
- deklaration
- privat deklaration
- privat [denna] förklaring
- privat [från Var] -deklaration
- skyddad deklaration
- skyddad [från Var] -deklaration
Offentligt (standard) räckvidd
Som standard är omfattningen public
, värdet kan nås var som helst.
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
}
}
En privat räckvidd
När räckvidden är privat kan det bara nås från den aktuella klassen eller andra instanser av den aktuella klassen.
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
}
}
Ett privat paketspecifikt område
Du kan ange ett paket där det privata värdet kan nås.
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
}
}
Objekt privat räckvidd
Det mest restriktiva räckvidden är "objekt-privat" -omfång, som endast tillåter åtkomst till det värdet från samma instans av objektet.
class FooClass {
private[this] val x = "foo"
def aFoo(otherFoo: FooClass) = {
otherFoo.x // <- This will not compile, accessing x outside the object instance
}
}
Skyddat räckvidd
Det skyddade omfånget tillåter tillgång till värdet från alla underklasser i den aktuella klassen.
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
}
Paketskyddat omfattning
Det paketskyddade räckvidden tillåter åtkomst till värdet endast från alla underklasser i ett specifikt paket.
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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow