Как я могу создать доступный только для чтения ученик в Scala?

Я хочу создать класс Scala, в котором один из его переменных предназначен только для чтения извне класса, но все еще является классом var. Как мне это сделать?

Если это был val, не было никакой необходимости делать что-либо. По умолчанию определение подразумевает открытый доступ и только чтение.

2 ответа

Решение

Определить публичный "добытчик" для частного var,

scala> class Foo {
     |   private var _bar = 0
     |
     |   def incBar() { 
     |     _bar += 1 
     |   }
     |
     |   def bar = _bar
     | }
defined class Foo

scala> val foo = new Foo
foo: Foo = Foo@1ff83a9

scala> foo.bar
res0: Int = 0

scala> foo.incBar()

scala> foo.bar
res2: Int = 1

scala> foo.bar = 4
<console>:7: error: value bar_= is not a member of Foo
       foo.bar = 4
           ^

Определите черту с помощью метода "getter":

trait Foo {def bar: T}

Определите класс, который расширяет эту черту, и который имеет вашу переменную

закрытый класс FooImpl (var bar: T) расширяет Foo

Ограничьте видимость этого класса соответствующим образом.

Наличие выделенного интерфейса позволяет также использовать несколько классов реализации во время выполнения, например, для более эффективного покрытия особых случаев, отложенной загрузки и т. Д.

Другие вопросы по тегам