2015-10-20 44 views
2

我们在命名空间中使用特殊关键字,如:refer,:as,:only等。什么是预知关键字知道如:引用,:使用和:仅在Clojure中?

这些关键字叫什么?到目前为止,我见过的书籍只是将它们当作自己,除了Clojure的喜悦,它似乎将其称为第199页的“指令”。

Clojure.org在与增值变量相关时将它们称为"metadata keys," under "special forms"。不知怎的,这些文档似乎并没有讲述整个故事(或者至少我没有真正理解它),也许我在混淆不同类型的关键?变量有“元数据键”,如:doc:name,而使用:refer来控制命名空间似乎是的东西。这些都是相同的类型?

我指的是以冒号开头的单词,就像常规关键字一样,但在Clojure中有特殊用途。

我们应该知道些什么?关键词?指令,无论这意味着什么?元数据关键字?

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

正如你可能猜到的,这里的Clojure初学者... 谢谢。

+1

元数据是包含一些不影响实际数据的数据的映射,但在某种程度上对其进行了描述。当编译器编译代码时,它会引用该元数据映射,并且如果存在某些键:private:doc e.t.c,它将执行一些其他操作。然而,定义了特殊的语法以便于输入。无论你想要什么,你都可以存储元数据。例如拉链存储那里的功能来操作树。 – JustAnotherCurious

回答

3

你必须区分他们和他们是什么意思

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

根据上下文,它们可以有不同的目的。您可以定义自己的功能,其中关键字对您而言意味着特别的东西Clojure具有不同的上下文,其中关键字扮演着非常特定的角色,就像你在你的问题中写的那样。具体名称元数据键是指在特定情况下归因于一组已知关键字的特定角色。

符号和集合(不是变量)可以绑定到元数据(如CL中的符号属性)。您只需拨打(meta s)即可获得元数据s。请参阅metadata的文档。

1

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

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

+0

这非常明确,谢谢。 –

相关问题