我今天開始使用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
個人而言,我會嘗試在使用動態綁定之前使用顯式值傳遞,這主要是因爲我提到的綁定的缺點,但它可以使代碼更加清晰和容易。 –