Scala, вызывать метод экземпляра прямо из вызова суперконструктора? - PullRequest
2 голосов
/ 10 февраля 2012

Предположим, у меня есть следующий код Scala:

class Foo(a: Int)

class Bar(b: Buffer[Int]) extends Foo (sum) {

  def sum = (1 /: b)(_ + _)

}

почему он жалуется на вызов метода sum из конструктора? Разве вообще невозможно получить такое поведение с такой простой реализацией? Я понимаю, что мог бы сделать объект-компаньон для Bar, но это не совсем то, что я бы сделал?

PS тега 'superconstructor' нет!)))

ОБНОВЛЕНИЕ: Каковы возможные альтернативы?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Каждый раз, когда создается экземпляр Bar, все его члены добавляются к нему.Только после завершения строительства вы можете вызвать его участников.

1 голос
/ 11 февраля 2012

, если sum не вызывается для экземпляра Bar - и это не так, поскольку он еще не создан!- тогда его место определенно не внутри Bar.Если Bar является его единственным пользователем, то естественным местом для него является объект-компаньон.

Более интересный вопрос: почему вы не хотите, чтобы это было в его естественном месте?

...