clojure - 如何在多个 Clojure 命名空间中调用同一个方法?

标签 clojure

我有一系列命名空间符号:

(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)

肯定有更好的方法吗?

最佳答案

查看 clojure.core/ns-resolve

(doseq [ns namespace-symbols]
  ((ns-resolve ns 'run))) ;; resolve and execute fn

你可以把它当作一个fn

(let [p (ns-resolve *ns* 'println)]
  (p "Hello")
  (p "World"))

关于clojure - 如何在多个 Clojure 命名空间中调用同一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14179221/

相关文章:

clojure - 高效的 Datomic 查询对分页集执行过滤

functional-programming - 自学SICP你会用什么语言?

clojure - 有没有办法执行面向 Clojure 的反射?

maven - 如何将非 Maven 代码添加到 boot-clj/boot 中?

multithreading - 使用 swank/slime 理解 Clojure 中的输出

clojure - ARef 中的 validate 方法的用途是什么?

database - "Web Development with Clojure": No such var: db/get-user

emacs - 如何在 Emacs 中正确配置 CIDER 的代码完成?

macros - 如何编写 Clojure 宏来创建多个表达式?

android - 将 JSON 数据从 android 发送到 compojure 服务器