初學Kotlin,通過幾個簡單的例子來簡單看一下Kotlin中let
, apply
,run
, with
的區別。
-
let
官方源碼:
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
例子:
fun main(args: Array<String>) {
val list: MutableList<String> = mutableListOf("A","B","C")
val change: Any
change = list.let {
it.add("D")
it.add("E")
it.size
}
println("list = $list")
println("change = $change")
}
輸出:
list = [A, B, C, D, E]
change = 5
結論:
在let中,用
it
表示引用對象,并可調用其方法,it
不可省略。
返回值是語句塊的最后一行,若最后一行語句無返回值,則整個let語句塊也無返回值
-
apply
官方源碼:
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
例子:
fun main(args: Array<String>) {
val list: MutableList<String> = mutableListOf("A", "B", "C")
val change: Any
change = list.apply {
add("D")
add("E")
this.add("F")
size
}
println("list = $list")
println("change = $change")
}
輸出:
list = [A, B, C, D, E, F]
change = [A, B, C, D, E, F]
結論:
在apply中,用
this
代表當前引用對象,并且調用其方法時,this
可省略。
apply必有返回值,且返回值是當前引用對象
-
run
官方源碼:
public inline fun <T, R> T.run(block: T.() -> R): R = block()
例子:
fun main(args: Array<String>) {
val list: MutableList<String> = mutableListOf("A", "B", "C")
val change: Any
change = list.run {
add("D")
add("E")
this.add("F")
size
}
println("list = $list")
println("change = $change")
}
輸出:
list = [A, B, C, D, E, F]
change = 6
結論:
在run中,用
this
代表當前引用對象,并且調用其方法時,this
可省略。
返回值是語句塊的最后一行,若最后一行語句無返回值,則整個run語句塊也無返回值
-
with
官方源碼:
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
例子:
fun main(args: Array<String>) {
val list: MutableList<String> = mutableListOf("A", "B", "C")
val change: Any
change = with(list) {
add("D")
add("E")
this.add("F")
size
}
println("list = $list")
println("change = $change")
}
輸出:
list = [A, B, C, D, E, F]
change = 6
結論:
這個感覺和run沒什么區別,只是調用方式不一樣。(應該有其他區別,只是我作為一個初學者暫未發現,有知道的朋友,敬請指點)