Clojure垃圾函数系列-「letfn」
发布于 Aug 08, 2018 by ThinkCat.
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允许像解构绑定数据一样,去声明一个函数。当然,可以不用这么写,可以直接把函数写到外部,然后去调用。
也没什么不对,只是对于一些辅助性质的专用小函数,放这里还是挺方便的。
毕竟是用来拯救手残的。