在O'Reilly的 「Clojure的編程:實用Lisp語言在Java世界」,有一種說法:如果x在clojure中評估爲(var x),爲什麼它們不相等?
var這個特殊形式做到這一點:
(def x 5)
(var x)
;= #' user/x
你」現在已經多次看到如何在REPL中打印變量:#',後面跟着一個符號。這是讀者語法擴展到調用VAR:
#'x
;= #' user/x
(Kindle的位置1278至1282年)。
測試結果似乎並非如此。我會認爲類型類型是相同的。
[user]> (def x 5)
#'user/x
[user]> (= 'x (var x))
false
[user]> (type 'x)
#<[email protected] clojure.lang.Symbol>
[user]> (type (var x))
#<[email protected] clojure.lang.Var>
[user]> 'x
x
[user]> (var x)
#'user/x
''x'評估爲'(quote x) ',而不是'(var x)'。 '(='x(quote x))'評估爲'true'。 'x'只是一個符號。它不需要引用'var'或其他任何東西。 – Thumbnail