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}))