Scala Language
Alcance
Buscar..
Introducción
El alcance en Scala define desde dónde se puede acceder a un valor ( def
, val
, var
o class
).
Sintaxis
- declaración
- declaración privada
- Declaración privada [este]
- Declaración privada de [fromWhere]
- declaración protegida
- Declaración protegida [de donde]
Ámbito público (predeterminado)
Por defecto, el alcance es public
, se puede acceder al valor desde cualquier lugar.
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 ámbito privado
Cuando el alcance es privado, solo se puede acceder desde la clase actual u otras instancias de la clase actual.
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 paquete privado de alcance específico.
Puede especificar un paquete donde se puede acceder al valor privado.
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
}
}
Objeto de ámbito privado
El ámbito más restrictivo es el ámbito "objeto-privado" , que solo permite acceder a ese valor desde la misma instancia del objeto.
class FooClass {
private[this] val x = "foo"
def aFoo(otherFoo: FooClass) = {
otherFoo.x // <- This will not compile, accessing x outside the object instance
}
}
Alcance protegido
El ámbito protegido permite acceder al valor desde cualquier subclase de la clase actual.
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
}
Paquete protegido alcance
El alcance del paquete protegido permite acceder al valor solo desde cualquier subclase en un paquete específico.
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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow