0
綁定變量,我這個宏命名空間中的聲明瞭一個名爲「助手」如何Clojure中的使用正申報和整個命名空間
(defmacro reply [name-key & arguments] ;;macro use BUS, it needs to be declared in this namespace
~(<! (reply* (~name-key BUS) arguments)))
我需要用它在其他命名空間中的「核心」之後,在這個初始化BUS與地圖命名空間,如果公交車在這個命名空間中聲明
(def BUS {:something "a"})
(reply ...)
命名空間傭工只編譯......我可以聲明,然後在我的特定的命名空間初始化
***helpers
(def BUS)
(declare BUS) ;;alternative
(defmacro reply...) ;;using BUS in its body!
***other namespace
(def BUS {:a "b"})
(reply ...) ;; this macro use BUS
但失敗
BUS already refers to: #'yourvertxproject.helper-fun/BUS in namespace: test1.core, compiling:(test1/core.clj:13:1)
這是做到這一點的?
注意正確的方法:我已經通知比一些庫在科爾馬分貝達到這個目的,例如,你初始化數據庫路徑和配置的變量,那麼你可以使用它取決於該變量的不同功能....
的感謝!...
謝謝你的答覆..但使用綁定,我需要在一個綁定塊中附上我所有的宏調用否... ...我不明白如何實現像 (def BUS {:a「b」} ) (回覆...) – user1050817 2015-03-08 22:49:57
嗯,是的,但是您可以將綁定表單儘可能地放在外面 - 如果您願意,甚至可以將它們放在主域中。 (綁定表單具有動態範圍,而不是詞法。) – bsvingen 2015-03-08 23:43:08
您所建議的內容基本上會創建一個全局變量,並且您可能冒險將代碼的不同部分覆蓋彼此的值。動態範圍避免了這個問題,因爲一旦你離開綁定表單,var就會返回它的舊值。 – bsvingen 2015-03-08 23:45:22