let
官方源码
1
|
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
|
例子:
1
2
3
4
5
6
7
8
9
10
11
|
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
官方源码:
1
|
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
|
例子:
1
2
3
4
5
6
7
8
9
10
11
12
|
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
官方源码:
1
|
public inline fun <T, R> T.run(block: T.() -> R): R = block()
|
例子:
1
2
3
4
5
6
7
8
9
10
11
12
|
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
官方源码:
1
|
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
|
例子:
1
2
3
4
5
6
7
8
9
10
11
12
|
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没什么区别,只是调用方式不一样。