大家好,2025 年的我依舊是對於 Clojure 一無所知的菜鳥小白工程師。
2023 年鐵人賽因不可抗力因素斷賽!
決定慢慢補完剩下 7 天。
今天我們要來學習 Clojure 中的 Returning Functions
。
try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/
Clojure 的函式可以回傳另一個函式,這個被回傳的函式可以存取當時的變數範圍(也就是 closure)。
以下範例:
defn inc-maker
"Create a custom incrementor"
[inc-by]
#(+ % inc-by))
(def inc3 (inc-maker 3))
(inc3 7)
; => 10
inc-maker
傳入 3
,回傳一個函式 #(+ % 3)
。inc-by
只存在於 inc-maker
裡,但回傳的函式記住了它(這就是 closure)。Closure(閉包) 是「記得自己在哪裡被創造」的函式。
它可以存取當時作用域內的變數,即使那些變數已經離開了原本的範圍。