获取列表clojure中的元素类型

时间:2013-02-11 15:18:16

标签: types clojure quote

我有一个引用的表达,例如

(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

2 个答案:

答案 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 '+)))