apply: info.apply
- apply函数返回类型,永远都是info本身,此条和 also 一模一样
- apply函数的 匿名函数里面持有的是this == info本身 此条和 run一模一样
let: 集合.let
- let函数返回类型,是根据匿名函数最后一行的变化而变化 此条和 run -模一样
- let函数的 匿名函数里面持有的是it ==集合本身 此条和 also -模一样
run: str.run
- run函数返回类型,是根据匿名函数最后一行的变化而变化 此条和 let一模一样
- run函数的 匿名函数里面持有的是this == str本身此条和 apply-模一样
with: with(str)
- with和run基本上一样,只不过就是使用的时候不同
- with函数返回类型,是根据匿名函数最后一行的变化而变化 此条和 let一模一样
- with函数的 匿名函数里面持有的是this == str本身此条和 apply一模一样
also: str.also
- also函数返回类型,永远都是str本身此条和 apply 一模一样
- also函数的 匿名函数里面持有的是it == str此条和 let -模一样
总结
apply和also是一个类别,属于一类
相同点:
apply与also返回类型是一样的, 他们永远都是返回info本身. 都是匿名函数,并且最后一行无法作为返回值,但不影响函数
不同点:
- apply{ 持有this this.setxxx()}
- alos { 持有it it.setxxx()}
应用点:
- val file本身= File("xx").apply { setFilexxx()... }.apply { ...}.apply{...} 链式调用
- val file本身= FIle("xx").also { it.setEilexxx()...}.also { ... }.also{...} 链式调用
run、let和with是一个类别,属于一类
相同点
run和let返回类型都是一样的,都会根据匿名函数最后一行返回的类型而决定run和let的返回类型(是根据匿名函数最后一行的变化而变化)
不同点
匿名函数里面 with和run持有this let持有it
应用点
- info.run { show("内容:length") show("${if(this is string)你是string类型 else 你不是string类型}")}
- info.let { show("内容:it") show("内容长度:{if(it is string)你是string类型 else 你不是string类型}")}
- with(info) { show("内容:length") show("${if(this is string)你是string类型 else 你不是string类型}")}