为什么Clojure缺少用户定义的读取器宏?



据我所知,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宏的想法。

相关内容

  • 没有找到相关文章

最新更新