据我了解,Clojure 不会公开阅读器宏表或允许用户定义阅读器宏。
The read table is currently not accessible to user programs.
我只是想知道是否有明确或明确的声明(可能来自 Rich Hickey)说明将它们排除在 Clojure 之外的理由。
注意我不是在问 Clojure 缺少用户定义的阅读器宏是好事还是坏事。只是想知道为什么。
据我了解,Clojure 不会公开阅读器宏表或允许用户定义阅读器宏。
The read table is currently not accessible to user programs.
我只是想知道是否有明确或明确的声明(可能来自 Rich Hickey)说明将它们排除在 Clojure 之外的理由。
注意我不是在问 Clojure 缺少用户定义的阅读器宏是好事还是坏事。只是想知道为什么。
从马特评论中的链接,引用 Clojure 的作者 Rich Hickey 的回答:
我不相信目前 Clojure 中需要读取器宏。它们极大地降低了使用它们的代码的可读性(由了解 Clojure 的人),鼓励不兼容的自定义迷你语言和方言(与命名空间分区的宏相比),并使加载和评估复杂化。
在某种程度上,我愿意满足与我自己不同的共同需求(例如正则表达式),我认为许多原本会迫使人们阅读宏的东西最终可能会出现在 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 关于阅读器宏的想法。