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.

War es hilfreich?

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).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top