有没有办法在lein repl启动时将方法注入clojure.core?
:injections关键字非常有用。不过,我希望在core中动态安装两个函数以进行调试。如何做到这一点有没有办法在lein repl启动时将方法注入clojure.core?,clojure,Clojure,:injections关键字非常有用。不过,我希望在core中动态安装两个函数以进行调试。如何做到这一点 :injections [(require 'spyscope.core) (use '[cemerick.pomegranate :only (add-dependencies)]) (use '[clojure.tools.namespace.repl :only (refresh)])] 理想情况下,我希望r
:injections [(require 'spyscope.core)
(use '[cemerick.pomegranate :only (add-dependencies)])
(use '[clojure.tools.namespace.repl :only (refresh)])]
理想情况下,我希望
refresh
能够在任何地方使用它您可以使用intern
来实现这一目的,尽管我认为可能有更好的方法让调试功能始终可用。我曾在intern
和clojure.core
一起使用过,我想利用现有函数来学习一些东西,但在其他名称空间中注入函数感觉太粗糙了
(intern 'clojure.core 'refresh (fn [] (println "refreshed!"))
(ns another-ns)
(refresh)
;=> refreshed!
在你的project.clj
中,你可以特别使用这个键。不过,这取决于您心目中的工作流,因为当REPL启动时,该函数不会在所有已经存在的名称空间中都可用,因为它们都已经在clojure.core
中引用了公共变量
但是,您可以在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))}