5

Scala に public インスタンス変数はもうありますか? Scala 2.8 をカバーするProgramming in Scalaを読んでいます。私が正しく理解していれば、2.8 の変数はデフォルトで public であると主張しています。

現在 2.9.1.final のコードを書こうとしていますが、インスタンス変数はデフォルトでプライベートになっていますか? しかしpublic、私が知っているキーワードはありません。(興味深いことに、2.x シリーズにはかつて存在してたようですが、不思議なことにどこかで姿を消しました。)

明らかな何かが欠けていますか?

また、拡張により、クラス コンストラクターに渡された変数を public として宣言する簡単な方法はありますか (それらにもデフォルトのプライベート可視性があるように見えるため)。

例:

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

labelEclipse は、 、attributes、およびfはすべて非公開であると主張しています。ライブラリとして Scala 2.9.1.final を使用しています。

4

1 に答える 1

11

Scalaでは、modiferを省略すると、インスタンスフィールドはデフォルトでパブリックになります。

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はフィールドがプライベートであると言います(変数にカーソルを合わせると意味します)。

于 2011-11-29T17:27:29.887 に答える