上一篇最后對Kotlin中Lambda表達式傳參這塊進行了代碼說明,由于這塊比較容易引起混淆,所以再基于上次的程序再來鞏固一下,先回顧一下上一次的程序:
基于此再來修改一下,再定義幾個函數:
好,接下來咱們來調用一下:
其中是用方法引用的方式來生成一個Lambda表達式的實例,好,那下面看這段代碼能否編譯通過呢?
咱們打開注釋就知道了,我覺得是編譯不過的,因為目前test5的第二個Lambda是需要接收2個參數,而非上一次只有一個參數,那么我們在寫Lambda時是不需要顯示指定的,看一看猜測是否如此:
test5(5) { x, y ->
run {
println("$x - $y")
}
}
掛起函數【suspend】:
在我們之前使用launch來創建協程時就看到過"suspend"關鍵字,回憶一下:
那這次來探究一下這個關鍵字的作用,先來對這個關鍵字進行理論化的說明:
“被suspend關鍵字所修飾的函數叫做掛起函數,掛起函數(suspending function)可以像普通函數一樣用在協程當中,不過它的一個特性在于可以使用其他的掛起函數,重點:掛起函數只能用在協程或者另一個掛起函數中
?!?/p>
好,下面咱們來看下示例:
下面咱們來調用一下:
運行一下:
以上就是關于掛起函數的說明,一般是用在協程當中的。
全局協程:
其實咱們之前就一起用過,如:
這里再單獨對它進行一個闡述:“全局協程類似于守護線程(deamon thread)使用GlobalScope啟動的活動協程并不會保持進程的生命,他們就像是守護線程一樣。”
下面再來看下它的效果:
由于它是守護效果,所以當主線程退出,其協程中的代碼也退出了,當然是不可能打印100次的啦,如下:
比如好理解,由于這個已經在之前大量用過了,就不多說了。