Quando usar um Var em vez de uma função?
Estou examinando o livro de desenvolvimento da web clojure e ele me diz para passar o objeto var do manipulador (abaixo definido) em vez da própria função, porque a função mudará dinamicamente (é isso que o wrap-reload faz).
O livro diz:
"Observe que precisamos criar um var a partir do manipulador para que este middleware funcione. Isso é necessário para garantir que o objeto Var que contém a função atual do manipulador seja retornado. Se usássemos o manipulador, o aplicativo veria apenas o valor original da função e alterações não seriam refletidas. " Eu realmente não entendo o que isso significa, os vars são semelhantes aos ponteiros 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"))))
Aqui está a chamada do manipulador:
(defn -main []
(jetty/run-jetty
(wrap-reload (wrap-nocache (var handler)))
{:port 3001
:join? false}))