Scala中的公共变量?

时间:2011-11-29 17:22:11

标签: eclipse scala variables 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
}

Eclipse声称labelattributesf都是私有的。 Scala 2.9.1.final被用作库。

1 个答案:

答案 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表示字段是私有的(假设你的意思是当你将鼠标悬停在变量上时)。