Domanda

Ci sono variabili di istanza pubbliche più a Scala? Sto leggendo Programmazione a Scala , che copre Scala 2.8. Se ho la comprensione correttamente, essa sostiene che vars in 2.8 sono per default pubblico.

Sto cercando di scrivere il codice per 2.9.1.final ora, e le variabili di istanza sono ora da privato default? Ma non c'è public parola chiave che io sappia. (È interessante notare, sembra che utilizzato di esistere qualche volta nella serie 2.x, ma da qualche parte misteriosamente scomparso lungo la linea.)

Mi sto perdendo qualcosa di ovvio?

Inoltre, per estensione, c'è un modo semplice per dichiarare una variabile passata per un costruttore della classe per essere pubblico (poiché è emerso che quelli hanno anche visibilità privato di default ormai troppo)?

Esempio:

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

Eclipse sostiene che label, attributes e f sono tutte private. Scala 2.9.1.final viene utilizzato come la libreria.

È stato utile?

Soluzione

In Scala, se si omette il modificatore, poi campi di istanza sono pubblici per impostazione predefinita:

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

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

non ci preoccupa. Tuttavia, quando si utilizza una variabile in un costruttore, la variabile è non necessariamente trasformato in 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) }}
                                                               ^

in modo da poter dichiareremo come val o var di avere a disposizione:

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

Si noti che tutti i campi sono in realtà private, ma espone Scala di accesso metodi (foo () e foo _ = (t: Int)) per consentire di accedere ai campi), che è il motivo per cui scala-ide dice che i campi sono private (supponendo che significa che quando si passa sopra la variabile).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top