Question

Y at-il des variables d'instance publiques plus à Scala? Je lis Programmation Scala , qui couvre Scala 2.8. Si je comprends bien, il prétend que VARs 2.8 sont par le public par défaut.

Je suis en train de écrire du code pour 2.9.1.final maintenant, et variables d'instance sont maintenant par des entreprises privées par défaut? Mais il n'y a pas de mot-clé public que je suis au courant. (Il est intéressant, il semble qu'il utilisé pour exister quelque temps dans la série 2.x, mais quelque part, il a mystérieusement disparu le long de la ligne.)

Suis-je manque quelque chose évidente?

En outre, par extension, est-il un moyen facile de déclarer une variable passée à un constructeur de classe pour être publique (car il semble que ceux-ci ont également une visibilité privée par défaut maintenant trop)?

Exemple:

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

Eclipse affirme que label, attributes et f sont toutes privées. Scala 2.9.1.final est utilisé comme la bibliothèque.

Était-ce utile?

La solution

Dans scala, si vous ne spécifiez pas le modificateur, puis champs d'instance sont publiques par défaut:

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

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

Pas de soucis là-bas. Cependant, lorsque vous utilisez une variable dans un constructeur, la variable est pas nécessairement tourné dans un champ:

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) }}
                                                               ^

vous pouvez le déclarer comme val ou var pour qu'il soit 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

Notez que tous les champs sont en fait privés, mais scala expose accesseur méthodes (foo () et foo _ = (t: Int)) pour vous permettre d'accéder aux champs), ce qui explique pourquoi scala-ide dit que les champs sont privés (en supposant que vous voulez dire quand vous survolez la variable).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top