Öffentliche Variablen in Scala?
Frage
Gibt es in Scala mehr öffentliche Instanzvariablen? ich lese Programmierung in Scala, der Scala 2.8 abdeckt. Wenn ich es richtig verstehe, behauptet es, dass Vars in 2.8 standardmäßig öffentlich sind.
Ich versuche jetzt Code für 2.9.1.Final zu schreiben, und Instanzvariablen sind jetzt standardmäßig privat? Aber es gibt keine public
Schlüsselwort, das mir bekannt ist. (Interessanterweise scheint es es Gebraucht irgendwann in der 2.x -Serie existieren, aber es verschwand irgendwo auf der Linie.)
Vermisse ich etwas Offensichtliches?
Gibt es im weiteren Sinne eine einfache Möglichkeit, eine Variable zu deklarieren, die an einen Klassenkonstruktor übergeben wurde (da es sich anscheinend auch anscheinend auch befindliche private Sichtbarkeit haben)?
Beispiel:
class Instance(label: String, attributes: Array[Int]){
val f = 0
}
Eclipse behauptet das label
, attributes
, und f
sind alle privat. Scala 2.9.1.Final wird als Bibliothek verwendet.
Lösung
In Scala sind die Instanzfelder, wenn Sie den Modifer weglassen, standardmäßig öffentlich:
scala> class Foo { var foo = 1 }
defined class Foo
scala> class Bar { def bar() = { val f = new Foo; f.foo = 5; }}
defined class Bar
Keine Sorge dort. Wenn Sie jedoch eine Variable in einem Konstruktor verwenden, ist die Variable jedoch nicht unbedingt umgedreht in ein Feld:
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) }}
^
Sie können es also als VAL oder VAR deklarieren, um es zur Verfügung zu stellen:
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
Beachten Sie, dass alle Felder tatsächlich privat sind, aber Scala enthüllt Accessor-Methoden (Foo () und Foo _ = (t: int)), damit Sie auf die Felder zugreifen können), weshalb Scala-ide sagt, dass die Felder privat sind (vorausgesetzt, Sie bedeuten, wenn Sie über die Variable schweben).