重新加载 Clojure Code/Routes - 使用符号与 var 的问题

Reloading Clojure Code/Routes - Issue with using the symbol vs. var

我是 Clojure 的新手,正在尝试设置一些简单的 Web 路由。我希望路由重新加载开发中的所有关联代码,而不是生产中的代码。

我只能通过使用 var 的路径来实现它,而不是实际的符号。有人可以解释我是否做错了吗?如果不是,为什么需要 var?

(def app-handler
  (let [formats [:json-kw :edn :yaml-kw :yaml-in-html :transit-json :transit-msgpack]
        wrapped-api (wrap-restful-format #'routes/api-routes :formats formats)
        combined-routes (compojure.core/routes wrapped-api #'routes/html-routes)
        with-defaults (wrap-defaults combined-routes api-defaults)]
    (if (is-dev?)
      ; Development
      (wrap-reload with-defaults)
      ; Production
      with-defaults)))

(注意上面的 #'routes/api-routes#'routes/html-routes)。

以更详细描述的方式 ,服务器最终会在传入路由函数时捕获它们,如果您提供 var,这将确保服务器使用任何更新的定义。

这被认为是在开发过程中提供路由或处理函数的正常方式,因此您无需重新启动网络服务器进程即可看到更新的定义。