2016-05-11 25 views
5

Ich folge diesem Tutorial building a Clojure backend und ich bin nicht genau in Clojure versiert.Clojure was bedeutet # '

Das Tutorial bietet diese Quelldatei

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

was genau bedeutet das #' bedeuten? Ich weiß, irgendwie ist es, den Wert routes bekommen, aber warum kann man nicht einfach sagen,

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

Ist die #' ein Ring spezifische Syntax? Konnte keine guten Ressourcen zu diesem Thema finden.

+2

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

Antwort

6

#'sym erweitert auf (var sym).

Eine Var kann austauschbar als die Funktion verwendet werden, die an sie gebunden ist. Das Aufrufen eines var löst jedoch die definierte Funktion dynamisch auf und ruft sie dann auf.

In diesem Fall dient es Entwicklungszwecken: Statt die Handler-Funktion als Wert zu übergeben, wird die Variable übergeben, so dass Jetty nicht neu gestartet werden muss, nachdem Sie shouter.web/routes ändern und neu bewerten.