Kotlin知识点-String.() -> Unit是什么

494 阅读1分钟

String.() -> Unit是什么

意思就是就是传入的lambda表达式入参会表达为this。

  1. 如果是在扩展函数里面,并且和扩展函数调用的类型相同,那么就是这个扩展函数本身。
  2. 如果是在扩展函数里面,并且和扩展函数调用的类型不同,那么就是扩展函数里面传入的数据。
  3. 如果是在普通函数里,那么就是扩展函数里面调用这个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”
}