我正在使用Clojure编写一个小测试框架。在运行时导入脚本
(ns pvt.core.runner
(use
[pvt.tests.deployment]
[pvt.tests.files]
[pvt.tests.jms]))
(defn- run-test
[test-name]
{test-name (test-and-log test-name)})
(defn- run-all-tests-in-namespace
[namespace-name]
(map
run-test
(vals (ns-publics (symbol namespace-name))))
)
(defn run-all-tests
[namespace-list]
(map run-all-tests-in-namespace namespace-list))
我run-all-tests
函数接受Clojure的脚本列表,加载这些脚本中所有的公共职能和运行它们。这很好,只是我必须实际导入这些脚本。我打电话给我的函数(run-all-tests ["pvt.tests.deployment" "pvt.tests.files" "pvt.tests.jms"])
,但这只适用于我导入这些脚本的每一个,如我的代码摘录开头所示。这是不行的,因为我不知道谁会调用run-all-tests,以及将使用哪些参数。
我想知道是否有在运行时导入这些脚本的方法。我已经知道每个脚本的命名空间,所以我拥有所有必需的信息。这可以做到吗? 谢谢
命名空间是一等公民。我不明白你的问题是什么。请参阅:http://clojure.org/namespaces和http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/use – dsm
嗯,命名空间是一等公民,但是这些技术需要去做sebi想要的东西对初学者来说可能不是那么明显。请适当地查看我的回答和评论(特别是关于如何映射和过滤名称空间的任何反馈)。 – noahlz
你的回答非常好,全面,但我猜想所有需要的是在函数内部调用(使用...)。 OP的回答证实了这种情况。 – dsm