当前位置:  开发笔记 > 编程语言 > 正文

如果'x在clojure中评估为(var x),为什么它们不相等?

如何解决《如果'x在clojure中评估为(varx),为什么它们不相等?》经验,为你挑选了1个好方法。



1> Alan Thompso..:

你错过了这个#符号:

(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,spyxspyxx宏,你将需要添加到您的project.clj:

   [tupelo "0.9.19"]

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有