2 つのデータ構造があり、両方が他方への参照を必要としているとします。単純にそれぞれを怠惰な val にして、それらを互いに渡すことはできません。スタック オーバーフローが発生します。
私が思いついた解決策は次のようなものです:
class Alpha((deferredBeta: Alpha) => Beta) {
lazy val beta = deferredBeta(this)
}
class Beta(val alpha: Alpha) {}
def main {
val alpha = Alpha(beta)
val beta = (alpha: Alpha) => Beta(alpha)
}
機能しますが、特にサブクラス化に関しては、少し壊れやすいようです。また、適切なドキュメントがないと、何が行われているのかわかりません。
この問題に対するよりクリーンな解決策はありますか?