-2
Kotlinを使用する構造体を初期化するためにDSLを定義したいと思います。あなたが見ることができるように、私は、それぞれがいくつかのフィールドを持つモジュールのセットを作りたいと思っています。Kotlin DSL定義で親タグと子タグをうまく結合する方法
class DSL : ModuleDSL() {
init {
module(Module("myModule")) {
field("Test", "Test")
field("Test", "Test")
field("Test", "Test")
}
module(Module("myOtherModule")) {
field("Test", "Test")
field("Test", "Test")
field("Test", "Test")
}
}
}
各フィールドはモジュールに接続する必要があります。フィールド定義が含まれているクロージャのWhit、afaik私はモジュールへの参照がありません。モジュールとそのフィールドとの間の接続を作成する最もエレガントな方法は何ですか。完全のために
私は、インターネット上の例から抽出された合理的なエレガントな解決策を見つけたいくつかの実験をした後、これらは、クラス
open class ModuleDSL {
fun field(fieldname: String, attributename: String) {
println("${fieldname} is named ${attributename}")
}
fun module(module: Module, function:() -> Unit) {
function.invoke()
}
fun createModel() {
println("Create my model")
}
}
class Module(name: String) {
init {
println("Create entity ${name}")
}
}
fun main(args: Array<String>) {
val myModuleDsl = DSL()
myModuleDsl.createModel()
}
ドキュメントを読んだことがありますか? https://kotlinlang.org/docs/reference/type-safe-builders.html –
これはいいです。その例に基づいて、私が投稿した例を抽出しました。下記参照。 –