2014-06-17 34 views
1

&form&env在這個例子中做了什麼(取自core.clj)?做有&特殊含義的符號嗎?

(def 
    ^{:macro true 
    :added "1.0"} 
    let (fn* let [&form &env & decl] (cons 'let* decl))) 

做符號開始在任何上下文&...(除只是普通&)具有特殊的含義?

爲什麼&form&env用在fn*的形體?

+3

也許這個鏈接會有幫助。 http://blog.jayfields.com/2011/02/clojure-and.html – ntalbs

回答

3

是的,&窗體和& env是宏內的特殊變量。名稱以'&'開頭,以避免與正常用戶定義的符號發生名稱衝突。

&窗體的值是宏擴展前原始宏調用的形式。

& env的值是一個詞法綁定的映射。 & env的密鑰是詞彙綁定的符號。

[改編自stevenminer's comment]