質問

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はフィールドがプライベートであると言います(変数の上にホバリングする場合を意味します)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top