Вопрос

Есть ли в 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 говорит, что поля являются частными (при условии вас означайте, когда вы нажимаете на переменную).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top