今天我开始尝试使用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