Общественные переменные в Scala?
Вопрос
Есть ли в Scala больше переменных общедоступного экземпляра? я читаю Программирование в Scala, который охватывает Scala 2.8. Если я правильно это понимаю, он утверждает, что VAR в 2.8 публикаются по умолчанию.
Я пытаюсь написать код для 2.9.1.final сейчас, а переменные экземпляра теперь по умолчанию частными? Но нет public
Ключевое слово, о котором я знаю. (Интересно, что это кажется использовал чтобы существовать где -то в серии 2.x, но он загадочно исчез где -то вдоль линии.)
Я упускаю что -то очевидное?
Кроме того, существует ли простой способ объявить переменную, передаваемую конструктору класса, быть публичной (поскольку кажется, что они также имеют частную видимость по умолчанию)?
Пример:
class Instance(label: String, attributes: Array[Int]){
val f = 0
}
Затмение утверждает, что label
, attributes
, а также f
все частные. Scala 2.9.1.final используется в качестве библиотеки.
Решение
В 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 говорит, что поля являются частными (при условии вас означайте, когда вы нажимаете на переменную).