Scala中是否有公共实例变量了?我正在阅读 在Scala中编程, ,涵盖Scala 2.8。如果我正确理解它,它声称2.8中的var是默认情况下的公开。

我正在尝试编写2.9.1。现在的代码,现在默认情况下是私有的实例变量?但是没有 public 我知道的关键字。 (有趣的是,它看起来很 用过的 在2.x系列中的某个时候存在,但它神秘地消失在线。

我想念明显的东西吗?

另外,从扩展过程中,是否有一种简单的方法来将变量传递给类构造函数为公开(因为看来这些变量现在也具有默认的私人可见性)?

例子:

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

Eclipse声称这一点 label, attributes, , 和 f 都是私人的。 Scala 2.9.1。最终被用作库。

有帮助吗?

解决方案

在Scala中,如果您省略了修改器,则默认情况下实例字段是公开的:

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说这些字段是私有的(假设您是您意思是当您徘徊在变量上时)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top