2

假设我有以下 Scala 代码:

class Foo(a: Int)

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

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

}

为什么它抱怨sum从构造函数调用方法?用如此简单的实现根本不可能得到这样的行为吗?我意识到我可以为它制作一个伴生对象,Bar但这不完全是我会做什么?

PS没有“超级构造器”标签!)))

更新:有哪些可能的选择?

4

2 回答 2

3

每次Bar构造实例时,都会将其所有成员添加到其中。只有在构建完成后,您才能调用其成员。

于 2012-02-10T18:00:52.037 回答
1

ifsum没有在实例上被调用Bar——它不是,因为它还没有被构造!——那么它的位置肯定不在里面Bar。如果Bar是它的唯一用户,那么它的自然位置就是伴生对象。

更有趣的问题是为什么你不希望它在自然的地方?

于 2012-02-10T23:54:24.433 回答