关于 Clojure 中的 :refer、:use 和 :only 等预设关键字,有什么需要了解的?

What's to know about pre-set keywords like :refer, :use and :only in Clojure?

我们在命名空间中使用特殊关键字,例如:refer:as:only等。

这些关键字叫什么?到目前为止,我所看到的书籍只是将它们称为它们本身,除了 The Joy of Clojure 似乎在第 199 页上称它们为 "directives"。

Clojure.org 当它们与变量相关时称它们为 "metadata keys," under "special forms"。不知何故,这些文档似乎并没有讲述整个故事(或者至少我没有真正理解),也许我混淆了另一种密钥? Vars 有 "metadata keys" 像 :doc:name,而使用 :refer 来控制命名空间似乎 一些事情。这两个是同一种类型吗?

我指的是前面有冒号的词,如常规关键字,但在 Clojure 中有特殊用途。

我们应该了解他们什么?关键词?指令,是什么意思?元数据关键字?

而且,如果所有变量都有元数据键,我们是否可以像在浏览器控制台中使用 JavaScript 变量、原型等一样访问它们?

您可能已经猜到了,这里是 Clojure 初学者... 谢谢。

你必须区分它们是什么和它们意味着什么

关键字只是自我评估的符号标识符。

根据上下文,它们可以有不同的目的。您可以定义自己的函数,其中关键字对您来说具有特殊意义。 Clojure 有不同的上下文,其中关键字起着非常特定的作用,就像您在问题中写的那样。特定名称 元数据键 指的是在特定情况下归因于一组已知关键字的特定角色。

符号和集合(不是变量)可以绑定到元数据(如 CL 中的符号属性)。您只需为符号 s 调用 (meta s) 即可访问此元数据。请参阅 metadata.

的文档

总之,没什么。关键字是关键字,函数是函数,宏是宏。

ns 只是一个宏。正如您在 the source 中所见,它扩展为将引用加载到 Clojure 运行时的表达式。 :refer:use:only 只是这些函数碰巧使用的关键字。您可以复制该代码并制作自己的 my-ns 使用不同关键字的宏,它的工作方式完全相同。