Utiliser Kotlin Je souhaite définir un DSL pour initialiser une structure. Comme vous pouvez le voir, je veux créer un ensemble de modules ayant chacun un certain nombre de champs.Comment associer élégamment les étiquettes parent et enfant dans une définition 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")
}
}
}
Chaque zone doit être connectée au module. Whit dans la fermeture contenant les définitions de champ, afaik je n'ai pas de référence au module. Quelle est la manière la plus élégante de créer une connexion entre le module et ses champs?
Pour être complet, ceux-ci sont le reste des classes
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()
}
Aviez-vous lu les documents? https://kotlinlang.org/docs/reference/type-safe-builders.html –
Oui, c'est un bon. Sur la base de cet exemple, j'ai extrait un exemple que j'ai posté. Voir ci-dessous. –