:injections关键字非常有用。但是,我希望在核心中动态安装一些函数以进行调试。怎么办呢?
:injections [(require 'spyscope.core)
(use '[cemerick.pomegranate :only (add-dependencies)])
(use '[clojure.tools.namespace.repl :only (refresh)])]
理想情况下,我希望refresh
留在我可以随处使用的地方
答案 0 :(得分:4)
您可以将intern
用于此目的,但我怀疑可能有更好的方法让调试功能始终可用。我曾经intern
和clojure.core
使用现有函数来学习东西,但是在其他命名空间中注入函数时感觉太过黑了。
(intern 'clojure.core 'refresh (fn [] (println "refreshed!"))
(ns another-ns)
(refresh)
;=> refreshed!
在您的project.clj
中,您可以使用:repl-options
密钥,特别是:init
。但是,这取决于您所考虑的工作流程,因为该函数在REPL启动时已存在的所有命名空间中都不可用,因为它们都已refer
编辑了clojure.core
中的公共变量1}}。
然而,当REPL启动时,您可以调用(clojure.tools.namespace.repl/refresh)
一次,以重新加载所有名称空间,然后该函数应该可用。我刚刚尝试了以下内容,似乎有效:
:repl-options {:init (do (require 'clojure.tools.namespace.repl)
(intern 'clojure.core 'refresh clojure.tools.namespace.repl/refresh)
(clojure.tools.namespace.repl/refresh))}