defmulti
调度的函数是否在调度程序的上下文/范围内执行?
我想为调度*foo*
电话设置动态变量defmethod
。
我有一种感觉,我需要将调用包裹给调度员,但想与Clojure魔术师确认。
分辨
根据@schaueho确认的潜在怀疑,以下是我需要的
;; Multimethod dispatch
(defmulti consume :type)
;; wrapper for dispatch
(defn consume-it [{:keys [token-fn]:as expression}]
"Wraps consume to imbue term name resolutions"
(if token-fn
(binding [*lookup-fn* token-fn]
(consume expression))
(consume expression)))
答案 0 :(得分:1)
如果我理解正确,您希望在调度功能中使用binding
。调度函数的目的是返回一个值,该值将用于标识要调用的方法,而不是实际调用已标识的方法。
(def ^:dynamic *dynvar* nil)
(defmulti mymulti
(fn [two args]
(binding [*dynvar* (new-value two args)]
(compute-dispatch-value two args)))
在此示例中,compute-dispatch-value
将看到*dynvar*
的新绑定,但之后的任何调用方法都不会。