Types 获取列表clojure中元素的类型

Types 获取列表clojure中元素的类型,types,clojure,quote,Types,Clojure,Quote,我有一个引用的表达 (def foo '(+ 1 (bar))) 我希望能够找到此列表中任何元素的类型,例如 (type (second foo)) 根据值的类型,我会得到不同的结果,例如,下面的两个值都计算为java.lang.Double,这正是我想要的 (type '3.0) (type 3.0) 然而 分别产生 clojure.lang.Symbol clojure.core$_PLUS_ 我想也许解决问题的钥匙会有所帮助 (type (resolve '+)) 评估结果为:

我有一个引用的表达

(def foo '(+ 1 (bar)))
我希望能够找到此列表中任何元素的类型,例如

(type (second foo))
根据值的类型,我会得到不同的结果,例如,下面的两个值都计算为java.lang.Double,这正是我想要的

(type '3.0)
(type 3.0)
然而

分别产生

clojure.lang.Symbol
clojure.core$_PLUS_
我想也许解决问题的钥匙会有所帮助

(type (resolve '+))
评估结果为:


clojure.lang.Var

列表中只有符号
'+
'bar
和自评估对象
1
(长)

(= '(+ 1 (bar))
   (list '+ '1 (list 'bar)))
=> true
使用
eval

(type (eval '+)) 
=> clojure.core$_PLUS_


因为数字是自评估对象。

取消对已解析变量的引用:

(type (deref (resolve '+)))

哎呀!已修复,但(类型(解析“+))的值仍然是clojure.lang.Var。我怎样才能从这里到clojure.core$\u PLUS_
(type '3.0) = (type 3.0) = (type (eval '3.0)) = java.lang.Double
(type (deref (resolve '+)))