相关疑难解决方法(0)

何时使用Var而不是函数?

我正在浏览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)

var clojure web

10
推荐指数
3
解决办法
496
查看次数

标签 统计

clojure ×1

var ×1

web ×1