2016-05-11 13 views
5

Podążam za tym tutorialem building a Clojure backend i nie jestem dokładnie zorientowany w Clojure.Clojure co znaczy # 'oznacza

Samouczek udostępnia ten plik źródłowy

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

co dokładnie robi #' oznacza? Wiem, że jakoś to coraz wartość routes ale dlaczego nie można po prostu powiedzieć

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

Czy #' składni specyficzny pierścień? Nie można znaleźć żadnych dobrych zasobów w tej sprawie.

+2

Zobacz http://stackoverflow.com/questions/10945187/is-pound-quote-hash-quote-in-clojure-running--resolve-and-symbol-functi – MicSokoli

Odpowiedz

6

#'sym rozszerza się do (var sym).

Zmienna może być używana zamiennie jako związana z nią funkcja. Jednak wywołanie var powoduje dynamiczne przekształcenie zdefiniowanej funkcji, a następnie wywołanie jej.

W tym przypadku służy to rozwojowi: zamiast podania funkcji handlerka routes według wartości, zmieniony atrybut jest przekazywany, tak aby Jetty nie musiał być ponownie uruchamiany po zmianie i ponownej ocenie shouter.web/routes.