我有一个引用的表达,例如
(def foo '(+ 1 (bar)))
我希望能够找到此列表中任何元素的类型,例如做一些像
这样的事情(type (second foo))
我根据值的类型得到不同的结果,例如以下两者都评估为java.lang.Double,这是我想要的
(type '3.0)
(type 3.0)
然而
(type '+)
(type +)
分别产生
clojure.lang.Symbol
clojure.core$_PLUS_
我想也许解决方案的关键还有帮助
(type (resolve '+))
评估为:
clojure.lang.Var
答案 0 :(得分:3)
列表中只有符号'+
,'bar
和自我评估对象1
(长)
(= '(+ 1 (bar))
(list '+ '1 (list 'bar)))
=> true
使用eval
。
(type (eval '+))
=> clojure.core$_PLUS_
和
(type '3.0) = (type 3.0) = (type (eval '3.0)) = java.lang.Double
因为数字是自我评估的对象。
答案 1 :(得分:0)
取消引用已解决的Var:
(type (deref (resolve '+)))