07.04-Closure
可以在函式中建立函式:
add
是一個區域變數,型別是 func(int, int) int
(一個需要帶入兩個 int
型別以及傳回一個 int
型別的函式)當我們建立一個區域函式時,此函式只能存取其它區域變數(如第四章的 scope 所述)。
increment
將 1 加到 x
變數,此變數定義於 main
函式的 scope,increment 函式可以存取與修改 x
變數,這就是為何我們在第一次呼叫 increment
時會看到顯示為 1,而第二次會看到顯示 2。
類似的函式與函式所參照的非區域變數合稱為所謂的 closure,以同樣的例子, increment
與 x
變數形成了一個 closure。
Closure 的一種使用方式是,透過設計一個函式,此函式會傳回另一個函式的結果(被呼叫時可以產生一串號碼),例如,下列會產生全部的偶數:
makeEvenGenerator
會傳回一個函式(此函式會產生偶數),每次呼叫此函式時,它會將 2 加到區域變數 i
,與一般區域變數的差異是:此變數存在於兩個呼叫之間。
Last updated