私はこのしつこい問題を抱えています:
ラッパーは、関数を受け取り、パラメーターを受け取る別の関数を返し、パラメーターに対して何かを行い、それを関数に戻す関数です。
(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? 間違い}))