Clojure程序设计
上QQ阅读APP看书,第一时间看更新

2.2 读取器宏

读取器负责读入Clojure形式,并将其从文本转换为Clojure数据结构。除了那些基本的形式,Clojure 读取器还能识别一组专门的读取器宏读取器宏与宏是完全不同的,在第7章中有详细讨论。。所谓读取器宏,是指由宏字符前缀触发的特殊读取器行为。

最常见的读取器宏是注释。触发注释的宏字符是分号(;),其对应的特殊读取器行为是“忽略后面的所有内容直至本行结束”。

相较于那些冗长的列表形式,读取器就是它们的缩写,这有利于减少不必要的视觉干扰。你已经见过其中的一个了。引号(')可以阻止求值。

        '(1 2)
        -> (1 2)

'(1 2)与较长的(quote (1 2))等价。

        (quote (1 2))
        -> (1 2)

本书稍后会讨论其他的读取器宏。从表2-2中,你能找到一份语法快速概览,还能找到更多的相关讨论。

表2-2 读取器宏

Clojure不允许程序定义新的读取器宏,其原因在Clojure邮件列表中http://tinyurl.com/clojure-reader-macros。进行了阐述(还有为些展开的激烈的辩论)。如果你是从Lisp那也过来的,这可能会有点令人沮丧。我们能体会你的痛苦。但在灵活性上做出的这个妥协,能给予Clojure一个更加稳定的内核。如果允许自定义读取器宏,很可能会降低Clojure程序的互操作性,并且难以阅读。