私はこのしつこい問題を抱えています:
ラッパーは、関数を受け取り、パラメーターを受け取る別の関数を返し、パラメーターに対して何かを行い、それを関数に戻す関数です。
(defn ラッパー [関数] (fn [パラメータ] (func (do-something-to params))))
私がやりたいのは、ラッパーからラッパーへのパラメーターの変更を追跡することです
たとえば、次の 2 つのラッパーを定義できます。
(defn wrap-inc [関数] (コンプ機能株式会社)) (defn wrap-double [関数] (comp 関数 #(* % 2)))
それから、
(定義 h (-> #(* % 3) ラップ株式会社 ラップダブル))
次と同等です。
(def h (fn [x] (* (inc (* 2 x)) 3))) (時間 1) => 9
dbg->
今、私はそのように定義したいと思います
(def h-dbg (dbg-> #(* % 3) ラップ株式会社 ラップダブル))
同じ機能を引き続き提供するだけでなく、古い値と新しい値も追跡します。
(h-dbg 1) => 9
コンソールにデバッグ情報も表示されます。
"wrap-double: (in: 1, out: 2)" "wrap-inc: (in: 2, out 3)"
この種のパターンは、このようなリング ラッパーをデバッグして、それぞれが何をしているかを把握するのに非常に役立ちます。たとえば、次の典型的な例です。
(定義開始 [] (桟橋/ラン桟橋 (-> #'routes-handler ;;(wrap-reload-modified ["clj-src"]) (ラップファイル「リソース/パブリック」) ラップファイル情報 wrap-decamelcase-params ラップキーワードパラメータ ラップネストされたパラメータ ラップパラメータ wrap-ignore-trailing-slash) {:ポート 8890 :join? 間違い}))