Класс Конструктор / Сеттер - PullRequest
3 голосов
/ 22 октября 2010

Я довольно новичок в Scala, исходя из базового Java-фона. Я посмотрел, как реализовать конструкторы классов и как обеспечить некоторую логику в установщике для поля этого класса.

class SetterTest(private var _x: Int) { 
    def x: Int = _x
    def x_=(x: Int) {
        if (x < 0) this._x = x * (-1)
    }   
}

Параметру конструктора присваивается поле _x, поэтому установщик не используется. Что если я захочу использовать логику сеттера?

object Test {
    def main(args: Array[String]) {
        val b = new SetterTest(-10)
        println(b.x) // -10
        b.x = -10
        println(b.x) // 10
    }
}

В Java я мог бы использовать установщик в конструкторе для принудительного использования этого образца логики.

Как бы я этого достиг в scala?

1 Ответ

6 голосов
/ 22 октября 2010

В Scala все тело класса составляет основной конструктор.Так что вы можете просто сделать это:

class SetterTest(private var _x: Int) {
  x = _x // this will invoke your custom assignment operator during construction

  def x: Int = _x
  def x_=(x: Int) {
    if (x < 0) this._x = x * (-1)
  }
}

Теперь попробуйте:

scala> new SetterTest(-9).x
res14: Int = 9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...