Scala で DSL をいじっているので、次のようなものがあるとしましょう。
house {
floor {
bedroom("kids)
bedroom("master")
}
floor {
kitchen()
}
}
今私が欲しいのは、ネストされた各ブロックで、参照を持っているか、囲んでいるブロックの関数を参照していることです。たとえば、床が家に追加され、寝室が床に追加されるなどの効果があります。
現在、私は現在の「コンテキスト」を追跡するために、ネストされた各レベルで更新されるグローバルスタックを持つという恐ろしい方法でこれを行っています。また、私の現在のバージョンは、家に寝室を追加できるという点でタイプセーフではありません。
別の以前のリビジョンは
house {
floor {
bedroom("kids) +
bedroom("master")
} +
floor {
kitchen()
}
}
各ブロックがウィジェットのリストを返した場所 (+ は、次の「もの」を追加できるように、一般的な「もの」を「ものリスト」に変換する暗黙的なものを使用していました)。ブロックが返されると、返されたウィジェットのリストが追加されました。しかし、私は + を強制的に使用するのは好きではありません。
とにかく2つを融合するには?