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,attributes和f都是私有的.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表示字段是私有的(假设您意味着当你将鼠标悬停在变量上时).