我有一系列名称空间符号:
(def namespace-symbols (namespace-1 namespace-2 namespace-3))
我希望在每个方法上调用完全相同的方法(例如run
)。
(map #{%/run} namespace-symbols)
无效。
我也试过
(defmacro namespace-run
[namespace]
`(~(identity namespace)/run))
这也行不通。有没有办法做到这一点?
我终于想出了一个像这样的宏:
(defmacro namespace-run
[namespace]
`(~(symbol (str namespace "/run"))))
(macroexpand-1 '(namespace-run foobar))
;=> (foobar/run)
当然有更好的方法吗?
答案 0 :(得分:4)
(doseq [ns namespace-symbols]
((ns-resolve ns 'run))) ;; resolve and execute fn
您可以像fn
(let [p (ns-resolve *ns* 'println)]
(p "Hello")
(p "World"))
答案 1 :(得分:0)
也许使用类似symbol
clojure.core/symbol
([name] [ns name])
Returns a Symbol with the given namespace and name.