6

据我了解,Clojure 不会公开阅读器宏表或允许用户定义阅读器宏。

来自http://clojure.org/reader

The read table is currently not accessible to user programs.

我只是想知道是否有明确或明确的声明(可能来自 Rich Hickey)说明将它们排除在 Clojure 之外的理由。

注意我不是在问 Clojure 缺少用户定义的阅读器宏是好事还是坏事。只是想知道为什么。

4

2 回答 2

4

从马特评论中的链接,引用 Clojure 的作者 Rich Hickey 的回答:

我不相信目前 Clojure 中需要读取器宏。它们极大地降低了使用它们的代码的可读性(由了解 Clojure 的人),鼓励不兼容的自定义迷你语言和方言(与命名空间分区的宏相比),并使加载和评估复杂化。

在某种程度上,我愿意满足与我自己不同的共同需求(例如正则表达式),我认为许多原本会迫使人们阅读宏的东西最终可能会出现在 Clojure 中,在那里每个人都可以从共同的方法中受益。

Clojure 可以说是一种非常简单的语言,在这种简单性中蕴含着一种不同的力量。

我现在要继续追求这个,

富有的

于 2019-07-26T10:39:27.127 回答
3

直言不讳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 关于阅读器宏的想法。

于 2015-09-08T11:45:45.113 回答