关于 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
使用不同关键字的宏,它的工作方式完全相同。
我们在命名空间中使用特殊关键字,例如: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
使用不同关键字的宏,它的工作方式完全相同。