2016-05-11 3 views
5

Я следую этому руководству building a Clojure backend , и я не совсем хорошо разбираюсь в Clojure.Clojure what is # 'mean

Учебник содержит этот исходный файл

(ns shouter.web 
    (:require [compojure.core :refer [defroutes GET]] 
      [ring.adapter.jetty :as ring])) 

(defroutes routes 
    (GET "/" [] "<h2>Hello World</h2>")) 

(defn -main [] 
    (ring/run-jetty #'routes {:port 8080 :join? false})) 

, что именно делает #' значит? Я знаю, что как-то это становится значение routes, но почему вы можете не просто сказать

(ring/run-jetty routes {:port 8080 :join? false})) 

ли #' кольцо конкретный синтаксис? Не могли найти хороших ресурсов по этому вопросу.

+2

См. Http://stackoverflow.com/questions/10945187/is-pound-quote-hash-quote-in-clojure-running-the-resolve-and-symbol-functi – MicSokoli

ответ

6

#'sym распространяется до (var sym).

Параметр var может использоваться как функция, связанная с ним. Тем не менее, вызывая var, динамическая функция разрешает эту функцию, а затем вызывает ее.

В этом случае он служит для целей разработки: вместо передачи функции обработчика routes по значению передается значение var, которое необходимо выполнить, чтобы Jetty не перезапускался после изменения и переоценки shouter.web/routes.

 Смежные вопросы

  • Нет связанных вопросов^_^