Scala中是否还有公共实例变量?我正在阅读 Scala编程,其中涵盖了Scala 2.8。如果我正确理解它,它声称2.8中的变量默认是公开的。
我正在尝试为2.9.1.final编写代码,现在默认情况下实例变量是私有的吗?但是我没有注意到public
个关键字。 (有趣的是,它似乎使用在2.x系列中的某个时间存在,但它在某个地方神秘地消失了。)
我错过了一些明显的东西吗?
另外,通过扩展,是否有一种简单的方法可以将传递给类构造函数的变量声明为公共(因为现在它们似乎也具有默认的私有可见性)?
示例:
class Instance(label: String, attributes: Array[Int]){
val f = 0
}
Eclipse声称label
,attributes
和f
都是私有的。 Scala 2.9.1.final被用作库。
答案 0 :(得分: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
不用担心。但是,当您在构造函数中使用变量时,该变量不一定变为字段:
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表示字段是私有的(假设你的意思是当你将鼠标悬停在变量上时)。