【发布时间】:2017-08-15 16:17:46
【问题描述】:
我想使用 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")
}
}
}
每个字段都必须连接到模块。在包含字段定义的闭包中,我没有对模块的引用。在模块和它的字段之间创建连接的最优雅的方式是什么。
为了完整起见,这些是其余的类
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()
}
【问题讨论】:
-
是的,这很好。基于该示例,我提取了我发布的示例。见下文。