在compojure library in the core namespace,我看到以下形式:clojure:#'/(var ...)表單有什麼用?
(defn- compile-route
"Compile a route in the form (method path & body) into a function."
[method route bindings body]
`(#'if-method ~method
(#'if-route ~(prepare-route route)
(fn [request#]
(let-request [~bindings request#]
(render (do [email protected]) request#))))))
和
(defmacro GET "Generate a GET route."
[path args & body]
(compile-route :get path args body))
此外向上在文件中,所述if-method
和if-route
功能與defn-
已定義。
雖然我不明白#'
在這個compile-route
函數中的含義。 (var ...)
的文檔說:
該符號必須解析爲var,並返回Var對象本身(不是它的值)。讀者宏#'x擴展爲(var x)。
但是對於我而言,在發生什麼(即從defmacro調用)的情況下,它聽起來像是意味着符號的值將被返回,這與可替代性聽起來的相同:
(def x 5)
(+ x 7)
-> 12
即(+ x 7)
擴展,或者是一樣的,(+ 5 7)
缺少什麼我在這裏?
這正是原因。 – kotarak 2011-03-30 07:21:24
感謝您的確認! – 2011-03-31 13:20:51
還有一點評論:符號不包含參考。瓦爾做。這對於IIUC的Lisp是個區別。符號只是名稱,由編譯器解析爲Vars。代碼有效,因爲Var將所有的'.invoke'調用委託給它所持有的東西。 – kotarak 2011-03-31 14:36:42