kotlin 作用域函數(shù)
作用:它們的唯一目的是在對象的上下文中執(zhí)行代碼塊。當對一個對象調(diào)用這樣的函數(shù)并提供一個 [lambda 表達式]時,它會形成一個臨時作用域。在此作用域中,可以訪問該對象而無需其名稱
共有以下五種:let、run、with、apply 以及 also,如果不使用作用域函數(shù),我們每次都要創(chuàng)建新對象,在用新對象操作對象等,這樣就引入了一個新變量。
此五種作用域函數(shù),引用的上下文 ,分別是this和it
run、with、apply 使用的是this上下文,對于主要對對象成員最操作的時候,
使 用this上下文,用于區(qū)分接受者的成員及外部成員或函數(shù)。
let 及 also 將上下文對象作為 lambda 表達式參數(shù)使用的是it,it比this簡短,
更容易閱讀,當調(diào)用對象函數(shù)或?qū)傩詴r,不能像 this 這樣隱式地訪問對象.
因此,當上下文對象在作用域中主要用作函數(shù)調(diào)用中的參數(shù)時,使用 it 作為
上下文對象會更好。若在代碼塊中使用多個變量,則 it 也更好.此外,當將上
下文對象作為參數(shù)傳遞時,可以為上下文對象指定在作用域內(nèi)的自定義名稱,
代碼更容易閱讀。
五種作用域返回的值
apply 及 also 返回上下文對象
let、run 及 with 返回 lambda 表達式結(jié)果.
以下是根據(jù)預期目的選擇作用域函數(shù)的簡短指南:
對一個非空(non-null)對象執(zhí)行 lambda 表達式:let
將表達式作為變量引入為局部作用域中:let
對象配置:apply
對象配置并且計算結(jié)果:run
在需要表達式的地方運行語句:非擴展的 run
附加效果:also
一個對象的一組函數(shù)調(diào)用:with