我有这个烦人的问题:
包装器是接受一个函数的函数,并返回另一个接受参数的函数,对参数执行某些操作并将其粘贴回函数中。
(定义包装 [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->
这样
(def h-dbg (dbg-> #(* % 3) 包装公司 包裹双))
仍然给我相同的功能等价物,但也要跟踪旧值和新值:
(h-dbg 1) => 9
但也会在控制台中显示调试信息:
“双包装:(输入:1,输出:2)” “包装公司:(输入:2,输出 3)”
这种模式对于调试像这样的环包装器以弄清楚每个环在做什么非常有用,例如,这个典型的例子:
(定义开始 [] (码头/运行码头 (-> #'路由处理程序 ;;(包装重新加载修改 ["clj-src"]) (包装文件“资源/公共”) 包装文件信息 换行十进制大小写参数 换行关键字参数 包装嵌套参数 包装参数 wrap-ignore-trailing-slash) {:port 8890 :join? 错误的}))