Scalaのパブリック変数?
質問
Scalaにはもうパブリックインスタンス変数はありますか?私が読んでいる Scalaでのプログラミング, 、Scala 2.8をカバーしています。私がそれを正しく理解しているなら、2.8のVARSはデフォルトで公開されていると主張しています。
私は今2.9.1.ファイナルのコードを書き込もうとしていますが、インスタンス変数はデフォルトでプライベートになりましたか?しかし、ノーはありません public
私が知っているキーワード。 (興味深いことに、それはそれが見えます 使用済み 2.xシリーズに存在するが、それはラインに沿ってどこかに神秘的に消えた。)
明白なものが足りないのですか?
また、拡張により、クラスコンストラクターに渡された変数を公開する簡単な方法はありますか?
例:
class Instance(label: String, attributes: Array[Int]){
val f = 0
}
Eclipseはそれを主張しています label
, attributes
, 、 と f
すべてプライベートです。 Scala 2.9.1.Finalはライブラリとして使用されています。
解決
Scalaでは、モディファーを省略した場合、インスタンスフィールドはデフォルトで公開されます。
scala> class Foo { var foo = 1 }
defined class Foo
scala> class Bar { def bar() = { val f = new Foo; f.foo = 5; }}
defined class Bar
そこには心配はありません。ただし、コンストラクターで変数を使用する場合、変数は 必ずしも回転するとは限りません フィールドへ:
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) }}
^
したがって、それをVALまたはVARとして宣言して利用可能にすることができます。
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
すべてのフィールドは実際にはプライベートですが、SCALAはアクセサーズ方法(FOO()およびFOO _ =(T:INT))を公開してフィールドにアクセスできることに注意してください。そのため、Scala-Ideはフィールドがプライベートであると言います(変数の上にホバリングする場合を意味します)。