【发布时间】:2012-09-03 20:21:02
【问题描述】:
我有这个烦人的问题:
包装器是接受一个函数的函数,并返回另一个接受参数的函数,对参数执行某些操作并将其粘贴回函数中。
(定义包装 [func] (fn [参数] (func (do-something-to params))))而我想做的是跟踪参数变化,因为它从一个包装到另一个包装
例如,我可以定义两个包装器:
(defn wrap-inc [func] (comp func inc)) (defn wrap-double [func] (comp func #(* % 2)))那么,
(def h (-> #(* % 3) 包装公司 包裹双))相当于:
(def h (fn [x] (* (inc (* 2 x)) 3))) (h 1) => 9现在,我想定义 dbg-> 以便
仍然给我相同的功能等效项,但也要跟踪旧值和新值:
(h-dbg 1) => 9
但也会在控制台中显示调试信息:
“双包装:(输入:1,输出:2)” “包装公司:(输入:2,输出 3)”这种模式对于调试像这样的环形包装器非常有用,以弄清楚每个人在做什么,例如,这个典型的例子:
(定义开始 [] (码头/运行码头 (-> #'路由处理程序 ;;(包装重新加载修改 ["clj-src"]) (包装文件“资源/公共”) 包装文件信息 换行十进制大小写参数 换行关键字参数 包装嵌套参数 包装参数 wrap-ignore-trailing-slash) {:port 8890 :join?错误的}))【问题讨论】: