iT邦幫忙

2023 iThome 鐵人賽

0
自我挑戰組

從零開始的 clojure系列 第 24

Day 24 Clojure - Function - Returning Functions

  • 分享至 

  • xImage
  •  

前言

大家好,2025 年的我依舊是對於 Clojure 一無所知的菜鳥小白工程師。

2023 年鐵人賽因不可抗力因素斷賽!

決定慢慢補完剩下 7 天。

今天我們要來學習 Clojure 中的 Returning Functions

try Clojure here: https://qa-mktg.codingrooms.com/compiler/clojure/

Return Function & 閉包(Closure)

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(閉包) 是「記得自己在哪裡被創造」的函式。

它可以存取當時作用域內的變數,即使那些變數已經離開了原本的範圍。

小結

  • Return Function: 函式可以回傳函式。
  • 閉包(Closure):回傳的函式會「記住」當時定義時的變數環境,即使外層函式已經執行完畢。

參考文章


上一篇
Day 23 Clojure - Function - Anonymous Functions
系列文
從零開始的 clojure24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言