你错过了这个#
符号:
(def x 5) (spyx (var x)) (spyx #'x) (var x) => #'tst.clj.core/x (var x) => #'tst.clj.core/x
clojure阅读器使用源文件中的字符,并在它到达编译器之前替换#'x
=> (var x)
.正如您在上面所看到的,spyx
宏("间谍表达式")甚至看不到原始#'x
表达式 - 替换已经发生.
因此我们得到:
(= #'x (var x)) => true
你也可以尝试:
(println "type 1: " (type (var x))) (println "type 2: " (type #'x)) ;=> type 1: clojure.lang.Var ;=> type 2: clojure.lang.Var
如果你想用玩spy
,spyx
或spyxx
宏,你将需要添加到您的project.clj
:
[tupelo "0.9.19"]