【发布时间】:2015-04-14 17:50:43
【问题描述】:
我是 Clojure 的新手,正在尝试设置一些简单的网络路由。我希望路由在开发中重新加载所有相关代码,但不是在生产中。
我只能使用 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)。
【问题讨论】:
-
这是因为 app-handler 关闭了您的路由功能,如果您不使用 var,则提供您的 app-handler 作为参数的服务器实例无法查看更新。有关更完整的说明和演示,请参阅this answer。
-
@noisesmith 感谢您的快速回复!另一个答案很好,我只是不知道要搜索什么。与使用取消引用值的其他方法相比,使用
var会对性能产生任何有意义的影响吗? -
var 被认为是执行此操作的标准方法(至少在开发期间)。
-
如果你想回答我会接受:)