Pregunta

¿Hay variables de instancia pública en Scala? Estoy leyendo Programación en Scala, que cubre Scala 2.8. Si lo entiendo correctamente, afirma que los VAR en 2.8 son públicos por defecto.

Estoy tratando de escribir código para 2.9.1.final ahora, y las variables de instancia ahora son privadas de forma predeterminada. Pero no hay public Palabra clave que conozco. (Curiosamente, parece usó existir en algún momento de la serie 2.x, pero desapareció misteriosamente en algún lugar a lo largo de la línea).

¿Me estoy perdiendo algo obvio?

Además, por extensión, ¿hay una manera fácil de declarar una variable pasada a un constructor de clase para ser público (ya que parece que también tienen una visibilidad privada predeterminada ahora)?

Ejemplo:

class Instance(label: String, attributes: Array[Int]){
  val f = 0
}

Eclipse afirma que label, attributes, y f son todos privados. Scala 2.9.1.final se está utilizando como la biblioteca.

¿Fue útil?

Solución

En Scala, si omite el modificador, entonces los campos de instancia son públicos de forma predeterminada:

scala> class Foo { var foo = 1 }
defined class Foo

scala> class Bar { def bar() = { val f = new Foo; f.foo = 5; }}
defined class Bar

No se preocupe allí. Sin embargo, cuando usa una variable en un constructor, la variable es no necesariamente girado en un campo:

scala> class Foo(foo: Int)
defined class Foo

scala> class Bar { def bar() = { val f = new Foo(5); println(f.foo) }}
<console>:8: error: value foo is not a member of Foo
       class Bar { def bar() = { val f = new Foo(5); println(f.foo) }}
                                                               ^

Por lo tanto, puede declararlo como un Val o VAR para tenerlo disponible:

scala> class Foo(val foo: Int)
defined class Foo

scala> class Bar { def bar() = { val f = new Foo(5); println(f.foo) }}
defined class Bar

Tenga en cuenta que todos los campos son realmente privados, pero Scala expone métodos de accesorios (foo () y foo _ = (t: int)) para permitirle acceder a los campos), por lo que Scala-id dice que los campos son privados (suponiendo que usted significa cuando pasas sobre la variable).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top