我今天开始使用Clojure,偶然发现可以在运行时动态更改函数的说法。 这听起来很酷,所以我使用这个功能编写了一小段代码。使用Clojure在运行时动态绑定函数
(defn ^:dynamic state [x]
(odd x))
(defn even [x]
(if (= x 0)
(println "even")
(binding [state odd] (parity x))))
(defn odd [x]
(if (= x 0)
(println "odd")
(binding [state even](parity x))))
(defn parity [x]
(state (dec x)))
它工作了罚款,但因为我是完全地新的Clojure,我不知道这是否是
a)清洁功能的代码(因为奇数和偶数似乎有副作用?)
B)在运行时改变功能的方式应该是完成的
我会很感激任何形式的建议! :) -Zakum
感谢您的见解,Joost!所以我理解你是对的,我做的不是亵渎吗? 我知道这个事实,可以用不同的方式编写这个功能。但是,我是否至少在Clojure中捕获了动态绑定的想法? – Zakum
个人而言,我会尝试在使用动态绑定之前使用显式值传递,这主要是因为我提到的绑定的缺点,但它可以使代码更加清晰和容易。 –