2015-10-20 45 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

這非常明確,謝謝。 –

相關問題