String.() -> Unit是什么
意思就是就是传入的lambda表达式入参会表达为this。
- 如果是在扩展函数里面,并且和扩展函数调用的类型相同,那么就是这个扩展函数本身。
- 如果是在扩展函数里面,并且和扩展函数调用的类型不同,那么就是扩展函数里面传入的数据。
- 如果是在普通函数里,那么就是扩展函数里面调用这个lambda表达式传入的数据。
扩展函数中使用,并且和扩展函数调用的类型相同
fun String.change(success:String.() -> Unit){
success()
}
fun String.change2(success:(String) -> Unit){
success("bbb")
}
"aaa".change { this:String ->
// 这里的this是"aaa"
}
"aaa".change2 { it:String ->
// 这里的it是"bbb"
}
扩展函数中使用,并且和扩展函数调用的类型不同
fun String.change(success:String.() -> Unit){
success()
}
fun String.change2(success:Long.() -> Unit){
// 这里如果不写9会报错
success(9)
}
"aaa".change { this:String ->
// 这里的this是"aaa"
}
"aaa".change2 { this:Long ->
// 这里的this是9
}
普通函数里使用
fun a(success:String.() -> Unit){
success("ccc")
}
a{ this:String ->
// 这里的this是“ccc”
}