2

次のScalaコードがあるとします。

class Foo(a: Int)

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

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

}

sumコンストラクターからメソッドを呼び出すと文句を言うのはなぜですか?このような単純な実装では、このような動作を実現することはできませんか?コンパニオンオブジェクトを作成できることはわかっていますBarが、それは正確にはどうすればよいでしょうか。

PS'superconstructor'タグはありません!)))

更新:可能な代替案は何ですか?

4

2 に答える 2

3

のインスタンスが構築されるたびに、Barそのすべてのメンバーがインスタンスに追加されます。建設が完了した後にのみ、そのメンバーに電話をかけることができます。

于 2012-02-10T18:00:52.037 に答える
1

sumインスタンスで呼び出されていない場合はBar、まだ構築されていないため、呼び出されていません。-そして、その場所は間違いなく内部ではありませんBar。が唯一のユーザーである場合Bar、その自然な場所はコンパニオンオブジェクトです。

もっと興味深い質問は、なぜそれを自然な場所に置きたくないのかということです。

于 2012-02-10T23:54:24.433 に答える