Когда использовать Var вместо функции?

Я просматриваю книгу по веб-разработке clojure, и она говорит мне передать обработчик (определенный ниже) объект var вместо самой функции, потому что функция будет динамически изменяться (это то, что делает wrap-reload).

Книга говорит:

«Обратите внимание, что мы должны создать переменную из обработчика, чтобы это промежуточное ПО работало. Это необходимо для того, чтобы гарантировать, что объект 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"))))

Вот обработчик вызова:

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

Ответы на вопрос(3)

Ваш ответ на вопрос