据我所知,Clojure不公开reader宏表或允许用户定义reader宏。
从http://clojure.org/reader:
The read table is currently not accessible to user programs.
我只是想知道是否有一个明确的或明确的声明(可能来自Rich Hickey)说明将它们排除在Clojure之外的理由。
注意我不是问Clojure缺少用户定义的读取器宏是好是坏。不知道为什么。
从matt评论中的链接中,引用Clojure的作者Rich Hickey的回答:
我不相信在Clojure中需要reader宏时间。它们极大地降低了使用它们的代码的可读性(了解Clojure的人),鼓励不兼容的自定义mini-语言和方言(相对于名称空间分区的宏),以及复杂的加载和评估。
在某种程度上,我愿意容纳不同的共同需求我自己的(例如,正则表达式),我认为很多东西,否则会有强迫人们阅读宏可能会在Clojure中结束,在那里每个人可以从通用的方法中获益。
Clojure可以说是一种非常简单的语言,在这种简单性中存在着另一种力量。我暂时不讨论这个,
丰富
直截了当地说,有Tagged Literals
允许您指定如何处理下一个表单。例如,您可以添加
{to/u clojure.string/upper-case}
到data_readers.clj
(参见文档),然后像这样写:
testapp.core> #to/u "asd"
"ASD"
,但它没有完全支持阅读器宏那么强大,至少因为The data reader function is invoked on the form AFTER it has been read as a normal Clojure data structure by the reader
.
我找到了这个旧日志(不要问我怎么找到的)http://clojure log.n01se.net/date/2008 - 11 - 06. - html
里面讨论了Rich Hickey关于reader宏的想法。