6

コンテクスト

私はhttp://blog.fogus.me/2009/12/21/clojures-pre-and-post/を知っています

私が欲しいのは、正確に前後の条件ではありません。

一度だけ実行されるpre/post関数が欲しいです。

前後の条件についてこの機能を約束しているドキュメントはありません(つまり、複数回実行されていないということです)。

質問

Clojure関数の場合、1回だけ実行されるpre / post関数でタグ付けする方法はありますか?

  • 関数が呼び出されたときのpre関数
  • 関数が戻るときのpost関数

ありがとう!

4

2 に答える 2

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
于 2012-05-28T02:06:05.257 に答える
0

ダイアはこれを正確に行います。関数が評価される前に、すべての前提条件述語が呼び出されます。述語がすべてtrueを返す場合、関数は評価します。それ以外の場合は、例外が発生します。すべての事後条件述語の評価は次のとおりです。

于 2013-01-02T15:35:24.703 に答える