我们正在使用kotlin dsl作为用户友好的构建器来接受输入并生成数据。有办法做到相反吗? 即,将现有数据转换为dsl吗?
此kotlin表示形式可以转换为dsl吗?
val person = Person("John", 25)
val person = person {
name = "John"
age = 25
}
答案 0 :(得分:2)
除非您真的对{
和一些逗号感到疯狂,否则以下是绝对有效的Kotlin代码:
data class Person(
val name: String,
val age: Int
)
val person = Person(
name = "John",
age = 25
)
我似乎真的很接近您想要的东西,开箱即用。
当然,您可以通过编写一些额外的代码来实现所需的语法,例如:
import kotlin.properties.Delegates
data class Person(
val name: String,
val age: Int
)
class PersonDSL{
lateinit var name: String
var age: Int by Delegates.notNull<Int>()
fun toPerson(): Person = Person(this.name, this.age)
}
fun person(config: PersonDSL.() -> Unit): Person{
val dsl = PersonDSL()
dsl.config()
return dsl.toPerson()
}
fun main(){
val person = person {
name = "John"
age = 25
}
println(person) // Person(name=John, age=25)
}
但是为什么呢?