例如在 build.gradle.kts
使用的就是一些 Kotlin DSL(领域特定语言)
plugins {}
android {
defaultConfig {}
buildTypes {
debug {}
release {}
}
buildFeatures {}
}
dependencies {}
Kotlin DSL 可以很方便简化或自定义一些函数的使用方式
Kotlin DSL 通常结合以下几种特性来实现
(参数类型) -> 返回类型
this
关键字来引用接收者对象。或者说是希望通过更自然的语法来操作的对象。定义 DSL 扩展函数 button
fun Context.button(config: Button.() -> Unit): Button {
return Button(this).apply {
this.config()
}
}
这里的接收者是 Button
(接收者就是 Button.()
这里的调用者,即 Button
,也可以理解为后面使用时的:作用域、上下文)
可以再定义一些扩展函数简化原来的函数,例如这个 click
fun View.click(listener: (View) -> Unit) {
return this.setOnClickListener(listener)
}
在 Context 上下文中使用 button
button { // 这里的 this 是 Button 实例,即 DSL 的接收者
text = "Click Me"
click {
}
}