2014-06-17 25 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]