Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 如何在Leiningen REPL中保存文件时热重新加载命名空间_Clojure_Leiningen - Fatal编程技术网

Clojure 如何在Leiningen REPL中保存文件时热重新加载命名空间

Clojure 如何在Leiningen REPL中保存文件时热重新加载命名空间,clojure,leiningen,Clojure,Leiningen,使用leiningen REPL时,是否有一种方法可以使文件或ns在保存文件时自动重新加载到REPL中。目前,我通过在repl-中键入以下内容来重新加载ns(使用'sample.ns:reload all) 但是,我可以让它在文件保存时自动重新加载吗?库满足您的需要。它观察一个文件并执行一些操作。在您的情况下,一个操作是从该文件重新加载名称空间。此外,它还需要编写一些初始代码来启动观察器 这种方式对我来说有点复杂。从Lein直接推出的普通REPL不是有效的开发方式。您最好使用一些对Clojure

使用leiningen REPL时,是否有一种方法可以使文件或ns在保存文件时自动重新加载到REPL中。目前,我通过在repl-
中键入以下内容来重新加载ns(使用'sample.ns:reload all)

但是,我可以让它在文件保存时自动重新加载吗?

库满足您的需要。它观察一个文件并执行一些操作。在您的情况下,一个操作是从该文件重新加载名称空间。此外,它还需要编写一些初始代码来启动观察器


这种方式对我来说有点复杂。从Lein直接推出的普通REPL不是有效的开发方式。您最好使用一些对Clojure友好的编辑器,如Emacs或Lightable。

大多数主要编辑器都支持自定义热键绑定,并且有一个Clojure插件,允许您通过网络(通过“nREPL”)连接到活动的REPL。就个人而言,我使用vim,因此为此目的使用


这意味着您可以有一个自定义热键,用于在编辑任何文件时重新加载该文件。从这里开始,添加一个用于重新加载的自定义on-save钩子通常很简单

您可以轻松地重用框架中的代码

您将只需要文件监视程序

下面是它的外观:

(defn- clojure-file? [_ {:keys [file]}]
  (re-matches #"[^.].*(\.clj|\.edn)$" (.getName file)))

(defn- auto-reset-handler [ctx event]
  (binding [*ns* *ns*]
    (clojure.tools.namespace.repl/refresh)
    ctx))

(defn auto-reset
  "Automatically reset the system when a Clojure or edn file is changed in
  `src` or `resources`."
  []
  (hawk.core/watch! [{:paths ["src/" "resources/" "dev/src/" "dev/resources/"]
                 :filter clojure-file?
                 :handler auto-reset-handler}]))

你在用emacs吗?因为如果是这样,这是slime/swank支持的功能: