UP | HOME

Clojure垃圾函数系列-「letfn」
发布于 Aug 08, 2018 by ThinkCat.

Table of Contents

letfn实际上是一个可有可无的函数,它的存在大概是想再拯救一下手残的你。

函数样例

;;样例1
(letfn [(plus [x] (+ 2 x)) (gg [y] (- 22 y))]
  ;;do something with plus and gg
  (+ (plus 11) (gg 2))
  )
;; result: 33

;;样例2
(defn do-something [item]
  ;;do something using letfn
  (letfn [(eat [x] (println "eat:" x))
          (sleep [y] (println "sleep:" y))]
    ;;do
    (eat item)
    (sleep item)
    )
  )
(do-something "hehe")

;;result: nil
;;打印以下内容:
;; eat: hehe
;; sleep: hehe

样例1,就返回一个数值而已。然后样例2,传入一个参数,参与letfn的内部计算,有副作用的无返回值。

说明一下

letfn允许像解构绑定数据一样,去声明一个函数。当然,可以不用这么写,可以直接把函数写到外部,然后去调用。

也没什么不对,只是对于一些辅助性质的专用小函数,放这里还是挺方便的。

毕竟是用来拯救手残的。