1. run锭亏、with纠吴、apply、also慧瘤、let的區(qū)別
with
with()函數(shù)是一個內(nèi)聯(lián)函數(shù)戴已,它把傳入的對象作為接受者,在該函數(shù)內(nèi)可以使用this指代該對象來訪問其公有的屬性和方法锅减。該函數(shù)的返回值為函數(shù)塊最后一行或指定的return表示式糖儡。
調(diào)用同一個對象的多個方法 / 屬性時,可以省去對象名重復怔匣,直接調(diào)用方法名 / 屬性即可
let
let()函數(shù)是一個擴展對象函數(shù)握联,它可以對被擴展的對象做統(tǒng)一的判空處理,在函數(shù)塊內(nèi)使用it來指代該對象每瞒,可以訪問對象的公有屬性和方法金闽。let()函數(shù)的返回值和with()函數(shù)一樣,為函數(shù)塊最后一行或指定的return表示式剿骨。
run
run()函數(shù)是with()和let()函數(shù)的結(jié)合體代芜,它可以像with()函數(shù)一樣直接在函數(shù)塊中使用this指代該對象,也可以像let()函數(shù)一樣為對象做統(tǒng)一的判空處理浓利。
val state = bean?.value?.toInt() ?: run {
logD(TAG, "parse bean fail, return")
return
}
apply
apply()函數(shù)和run()函數(shù)相似挤庇,不同的是钞速,run()函數(shù)是以閉包形式返回最后一行代碼的值,而apply()函數(shù)返回的是傳入的對象本身
apply強調(diào)的是【調(diào)用者的相關操作】
also
強調(diào)的是【與調(diào)用者無關的操作】
also()函數(shù)和apply()函數(shù)相似嫡秕,不同的是渴语,also()函數(shù)在函數(shù)塊中使用it指代該對象,而apply()函數(shù)在函數(shù)塊中使用this指代該對象昆咽。