Clojure:帖子前功能

6 clojure

上下文

我知道http://blog.fogus.me/2009/12/21/clojures-pre-and-post/

我想要的不是前/后条件.

我想有前/后功能所执行的正是一次.

我没有看到任何文档向我承诺这个关于前/后条件的功能(即它们没有多次执行.)

对于Clojure函数,无论如何都要使用只执行一次的前/后函数来标记它,

  • 调用函数时的pre函数
  • 函数返回时的post函数

谢谢!

mik*_*era 2

您可以使用高阶函数相对轻松地完成此操作:

(defn wrap-fn [function pre post]
  (fn [& args]
    (apply pre args)
    (let [result (apply function args)]
      (apply post (cons result args)))))

(def f
  (wrap-fn
    +
    #(println (str "Calling function with args: " %&))
    #(println (str "Returning with result: " (first %&)))))

(f 2 3)
Calling function with args: (2 3)
Returning with result: 5
Run Code Online (Sandbox Code Playgroud)