Kotlin中apply,run,let,also,with函數(shù)總結(jié)

函數(shù)介紹

apply

fun <T> T.apply(f: T.() -> Unit): T { f(); return this }

返回值是本身

run

run函數(shù)和apply函數(shù)很像,只不過(guò)run函數(shù)是使用最后一行的返回,apply返回當(dāng)前自己的對(duì)象。

fun <T, R> T.run(f: T.() -> R): R = f()

let

默認(rèn)當(dāng)前這個(gè)對(duì)象作為閉包的it參數(shù),返回值是函數(shù)里面最后一行蛮穿,或者指定return

fun <T, R> T.let(f: (T) -> R): R = f(this)

let是將當(dāng)前的函數(shù)傳入后面的閉包中(it),可以隨意指定返回值得類(lèi)型
是不是意味著可以在let中,對(duì)其本身進(jìn)行操作毁渗。而其他的不行呢践磅?

also

從1.1新增的方法

public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }

感覺(jué)是 apply 之于run 的,also至于let的存在灸异。
都是在本身的調(diào)用方式上府适,強(qiáng)制返回本身

with

with函數(shù)是一個(gè)單獨(dú)的函數(shù),并不是Kotlin中的extension肺樟,所以調(diào)用方式有點(diǎn)不一樣檐春,返回是最后一行,然后可以直接調(diào)用對(duì)象的方法么伯,感覺(jué)像是let和apply的結(jié)合疟暖。

fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()

let難道不能指定返回自己?jiǎn)幔?/p>

總結(jié)

針對(duì)上面的疑問(wèn),用下面的代碼進(jìn)行了總結(jié)

    //apply
    m.apply {
        //1.調(diào)用函數(shù)可以直接寫(xiě)
        println(getMpValue())
        //2.如果調(diào)用外部函數(shù)對(duì)本身進(jìn)行操作.通過(guò)this指代
        doChangeMp(this)
        println(getMpValue())
        //返回值強(qiáng)制就是本身
    }

    //run
    m.run {
        //1.調(diào)用函數(shù)直接寫(xiě)
        //1.調(diào)用函數(shù)可以直接寫(xiě)
        println(getMpValue())
        //2.如果調(diào)用外部函數(shù)對(duì)本身進(jìn)行操作.通過(guò)this指代
        doChangeMp(this)
        println(getMpValue())
        //返回值可以自己定義.如果寫(xiě)this,就是和apply一模一樣
        this
    }

    //let的三個(gè)點(diǎn)
    m.let {
        //1.調(diào)用是需要調(diào)用it,才能調(diào)用自身的方法。
        println(it.getMpValue())
        //2.調(diào)用函數(shù)對(duì)it進(jìn)行操作
        doChangeMp(it)
        println(it.getMpValue())
        //3.最后一行返回值返回自己
        it
    }

    m.also {
        //1.調(diào)用是需要調(diào)用it,才能調(diào)用自身的方法俐巴。
        println(it.getMpValue())
        //2.調(diào)用函數(shù)對(duì)it進(jìn)行操作
        doChangeMp(it)
        println(it.getMpValue())
        //返回值強(qiáng)制就是本身
    }
    
    //with
    //首先不是拓展函數(shù)骨望。是單獨(dú)的函數(shù)。其實(shí)with和run相似
    with(m){
        //調(diào)用方式和apply和run相似
        println(getMpValue())
        //2.如果調(diào)用外部函數(shù)對(duì)本身進(jìn)行操作.通過(guò)this指代
        doChangeMp(this)
        println(getMpValue())
        //返回值可以自己定義.如果寫(xiě)this,就是和apply一模一樣
        this
    }

不同

letalso因?yàn)槭褂?code>it作為指代本身的關(guān)鍵字欣舵,就可以釋放this關(guān)鍵字的使用了擎鸠。
官網(wǎng)上的例子:

fun Block.copy() = Block().also { it.content = this.content }

其他

  • T.apply{}T.run{}其實(shí)是一樣的。apply`只是將本身做了強(qiáng)制的返回邻遏。
  • T.also{}T.let{}其實(shí)是一樣的糠亩。also只是將本身做了強(qiáng)制的返回。
  • with(T){}T.run{}其實(shí)是一致的准验。不同之處是,with是單獨(dú)的函數(shù)廷没。
  • 四者目前來(lái)看糊饱,沒(méi)有什么不同。都能完成一樣的工作颠黎。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末另锋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狭归,更是在濱河造成了極大的恐慌夭坪,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件过椎,死亡現(xiàn)場(chǎng)離奇詭異室梅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)疚宇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)亡鼠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人敷待,你說(shuō)我怎么就攤上這事间涵。” “怎么了榜揖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵勾哩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我举哟,道長(zhǎng)思劳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任炎滞,我火速辦了婚禮敢艰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘册赛。我一直安慰自己钠导,他們只是感情好震嫉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著牡属,像睡著了一般票堵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上逮栅,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天悴势,我揣著相機(jī)與錄音,去河邊找鬼措伐。 笑死特纤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侥加。 我是一名探鬼主播捧存,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼担败!你這毒婦竟也來(lái)了昔穴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤提前,失蹤者是張志新(化名)和其女友劉穎吗货,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體狈网,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宙搬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了孙援。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片害淤。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拓售,靈堂內(nèi)的尸體忽然破棺而出窥摄,到底是詐尸還是另有隱情,我是刑警寧澤础淤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布崭放,位于F島的核電站,受9級(jí)特大地震影響鸽凶,放射性物質(zhì)發(fā)生泄漏币砂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一玻侥、第九天 我趴在偏房一處隱蔽的房頂上張望决摧。 院中可真熱鬧,春花似錦、人聲如沸掌桩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)波岛。三九已至茅坛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間则拷,已是汗流浹背贡蓖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煌茬,地道東北人斥铺。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宣旱,于是被迫代替她去往敵國(guó)和親仅父。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容