我有一个名称空间符号的集合:
(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)当然还有更好的方法来做到这一点吗?
发布于 2013-01-06 05:20:24
查看核心/ns-解决
(doseq [ns namespace-symbols]
((ns-resolve ns 'run))) ;; resolve and execute fn你可以像对待fn一样对待它
(let [p (ns-resolve *ns* 'println)]
(p "Hello")
(p "World"))发布于 2013-01-06 04:40:34
也许可以用一些像symbol这样的东西
clojure.core/symbol
([name] [ns name])
Returns a Symbol with the given namespace and name.https://stackoverflow.com/questions/14179221
复制相似问题