函数
在kotlin中 函数可作为参数传递
fun a(p:()->Int) = p()
//方式1
fun b():Int { return 1 }
a(::b)
//方式2
a(fun() { return 1 })
两种方式都把函数作为对象处理
lambda
简化
fun a(p:(Int) -> Int) {}
a {
it+1
}
对于
fun a(p:(Int) -> Int){}
匿名函数fun(a:Int){ return a+1 }可以简化为{ it+1 }
即调用时
a({ it+1 })
当lambda表达式为函数最后一项实参时,可以移动至括号外
a{ it+1 }
DSL
由kotlin的语法特性,可以很轻松地构建DSL(领域特定语言)
gradle
class Dependency {
var libs = mutableListOf<String>()
fun implementation(lib: String) {
libs.add(lib)
}
}
fun dependencies(block: Dependency.() -> Unit): List<String> {
val dependency = Dependency()
dependency.apply(block)
return dependency.libs
}
调用
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json")
implementation("androidx.navigation:navigation-compose")
}
一些示例
buildMessage {
"sombodyA" says "hello" at 16
"sombodyB" says {
+picture("a.jpg")
+"pic here"
}
}
HTML
html {
body {
div {
a("https://kotlinlang.org") {
target = ATarget.blank
+"Main site"
}
}
}