关于kotlin的几个扩展函数(run, apply, let, with, also)

run

run:执行的意思。一个实例要去run了。比如说:

1
2
3
4
5
val boar = people.run {
goHunting(); // 打猎
fight(); // 战斗
catchAWildBoar(); //抓到一只野猪
} // run返回野猪

返回这个人运行后结果。即,打猎、战斗后,抓到了一只野猪。

apply

apply:有道词典翻译的是申请、应用的意思。一个实例要去应用了。比如说:

1
2
3
4
5
6
7
val richboy = Girl().apply {
getDressed() // 穿衣服
makeUp() // 化妆
}.run { // apply返回女孩这个实例
attendDancingParty() // 参加一个舞会
catchARichBoy() // 钓到金龟婿
} // run返回金龟婿

这个女孩通过一系列应用(穿衣打扮),然后去运行了(参加舞会钓到金龟婿)。最后把金龟婿赋值给richboy。

对于apply的应用场景,有时是为了编程图方便,流畅。比如说:

1
val girl = Girl().apply { getDressed() } // 构造实例并且穿衣,把实例赋值给girl

let

let: let在词典里解释是“允许,让;出租;假设;妨碍”,有种释放权力的意思。比如,let me past(让我过去)。

1
2
3
richBoy?.let {
it.buyPlane() // 买飞机
}

这个富有的男孩如果真存在,他就可以去买飞机。买飞机毕竟是一种释放,花钱的洒脱,欲望的释放。

with

字典里意思是“在一起;具有”

1
2
3
4
5
val girl = Girl()
with(girl) {
pet = Husky() // 宠物二哈
mobile = Iphone("xs plus") // iPhone
}

这个女孩拥有二哈,iphone手机

also

also是“也,而且”的意思

1
2
3
4
5
6
7
8
9
10
val taxi = Taxi()
val richBoy = Girl().apply {
getDressed() // 穿衣服
makeUp() // 化妆
}.also {
taxi.drive(it) // 计程车带她出门
}.run {
attendDancingParty() // 参加一个舞会
catchARichBoy() // 钓到金龟婿
}

这个女孩应用一通(穿衣化妆),而且也让计程车带她出门,然后运行(参加舞会钓到金龟婿),把金龟婿赋值给richBoy