Wenn ein Var anstelle einer Funktion verwendet werden soll?

Ich gehe das Clojure-Webentwicklungsbuch durch und es fordert mich auf, das Handler-Var-Objekt (definierter Balg) anstelle der Funktion selbst zu übergeben, da sich die Funktion dynamisch ändert (dies ist, was Wrap-Reload tut).

Das Buch sagt:

"Beachten Sie, dass wir eine Variable aus dem Handler erstellen müssen, damit diese Middleware funktioniert. Dies ist erforderlich, um sicherzustellen, dass das Var-Objekt mit der aktuellen Handlerfunktion zurückgegeben wird. Wenn wir stattdessen den Handler verwenden, würde die App nur sehen Der ursprüngliche Wert der Funktion und die Änderungen würden nicht wiedergegeben. " Ich verstehe nicht wirklich, was das bedeutet. Sind VARs C-Zeigern ähnlich?

(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"))))

Hier ist der Handler-Aufruf:

(defn -main []
  (jetty/run-jetty
   (wrap-reload (wrap-nocache  (var handler)))
   {:port 3001
    :join? false}))

Antworten auf die Frage(6)

Ihre Antwort auf die Frage