上QQ阅读APP看书,第一时间看更新
2.2 读取器宏
读取器负责读入Clojure形式,并将其从文本转换为Clojure数据结构。除了那些基本的形式,Clojure 读取器还能识别一组专门的读取器宏。所谓读取器宏,是指由宏字符前缀触发的特殊读取器行为。
最常见的读取器宏是注释。触发注释的宏字符是分号(;),其对应的特殊读取器行为是“忽略后面的所有内容直至本行结束”。
相较于那些冗长的列表形式,读取器就是它们的缩写,这有利于减少不必要的视觉干扰。你已经见过其中的一个了。引号(')可以阻止求值。
'(1 2) -> (1 2)
'(1 2)与较长的(quote (1 2))等价。
(quote (1 2)) -> (1 2)
本书稍后会讨论其他的读取器宏。从表2-2中,你能找到一份语法快速概览,还能找到更多的相关讨论。
表2-2 读取器宏
Clojure不允许程序定义新的读取器宏,其原因在Clojure邮件列表中进行了阐述(还有为些展开的激烈的辩论)。如果你是从Lisp那也过来的,这可能会有点令人沮丧。我们能体会你的痛苦。但在灵活性上做出的这个妥协,能给予Clojure一个更加稳定的内核。如果允许自定义读取器宏,很可能会降低Clojure程序的互操作性,并且难以阅读。