Scala中的公共变量?

Kev*_* Li 3 eclipse variables scala public scala-ide

Scala中是否还有公共实例变量?我正在阅读Scala编程,其中包括Scala 2.8.如果我正确理解它,它声称2.8中的变量是默认公开的.

我现在正在尝试为2.9.1.final编写代码,现在默认情况下实例变量是私有的吗?但是public我没有关注的关键字.(有趣的是,似乎它曾经存在于2.x系列中的某个时间,但它在某个地方神秘地消失了.)

我错过了一些明显的东西吗

另外,通过扩展,是否有一种简单的方法可以将传递给类构造函数的变量声明为公共(因为现在它们似乎也具有默认的私有可见性)?

例:

class Instance(label: String, attributes: Array[Int]){
  val f = 0
}
Run Code Online (Sandbox Code Playgroud)

Eclipse的声称label,attributesf都是私有的.Scala 2.9.1.final被用作库.

Mat*_*ell 10

在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
Run Code Online (Sandbox Code Playgroud)

不用担心.但是,在构造函数中使用变量时,变量不一定会变为字段:

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) }}
                                                               ^
Run Code Online (Sandbox Code Playgroud)

所以你可以将它声明为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
Run Code Online (Sandbox Code Playgroud)

请注意,所有字段实际上都是私有的,但scala公开了访问器方法(foo()和foo _ =(t:Int))以使您能够访问字段),这就是为什么scala-ide表示字段是私有的(假设您意味着当你将鼠标悬停在变量上时).