我正在按照以下示例调查Kotlin DSL:-
https://github.com/zsmb13/VillageDSL
我对如何在DSL公开的所有属性上强制使用规则感兴趣。
以下面的示例:-
val v = village {
house {
person {
name = "Emily"
age = 31
}
person {
name = "Jane"
age = 19
}
}
}
我想执行一个规则,使DSL用户无法输入重复的属性,如下所示
val v = village {
house {
person {
name = "Emily"
name = "Elizabeth"
age = 31
}
person {
name = "Jane"
age = 19
age = 56
}
}
}
例如,我曾尝试过Kotlin合同
contract { callsInPlace(block, EXACTLY_ONCE) }
但是这些仅在顶级功能中允许,例如,当在DSL中使用遵循Builder模式时,我看不到如何使用合同。>
@SimpleDsl1 class PersonBuilder(initialName: String, initialAge: Int) { var name: String = initialName var age: Int = initialAge fun build(): Person { return Person(name, age) } }
是否可以达到我期望的效果,即每人仅强制设置一个属性?
我正在按照以下示例研究Kotlin DSL:-https://github.com/zsmb13/VillageDSL我对如何对DSL公开的所有属性实施使用规则感兴趣。以...
我认为,如果您要查找的是编译错误,那么您也不会收到IDE警告或错误。归根结底,Kotlin的DSL实际上仍然是不同语法糖元素的组合。