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

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

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

Ответы [ 2 ]

34 голосов
/ 31 мая 2011

Определить публичный "получатель" для частного 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
           ^
1 голос
/ 28 октября 2016

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

черта Foo { Def bar: T }

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

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

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

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

...