我正在浏览clojure Web开发书,它告诉我传递处理程序(定义为bellow)var对象而不是函数本身,因为函数将动态更改(这就是wrap-reload所做的).
这本书说:
"请注意,我们必须从处理程序创建一个var才能使这个中间件工作.这是确保返回包含当前处理函数的Var对象所必需的.如果我们使用处理程序,那么应用程序只会看到功能的原始值和变化不会反映出来." 我真的不明白这意味着什么,变量类似于c指针?
(ns ring-app.core
(:require [ring.adapter.jetty :as jetty]
[ring.util.response :as response]
[ring.middleware.reload :refer [wrap-reload]]))
(defn handler [request]
(response/response
(str "<html>/<body> your IP is: " (:remote-addr request)
"</body></html>")))
(defn wrap-nocache [handler]
(fn [request]
(-> request
handler
(assoc-in [:headers "Pragma"] "no-cache"))))
Run Code Online (Sandbox Code Playgroud)
这是处理程序调用:
(defn -main []
(jetty/run-jetty
(wrap-reload (wrap-nocache (var handler)))
{:port 3001
:join? false}))
Run Code Online (Sandbox Code Playgroud)