2013-02-11 43 views
1

我有一个引用的表达式,例如获取列表clojure中的元素类型

(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

糟糕!修正了,仍然是(type(resolve'+))的值是clojure.lang.Var。我怎么能从这个clojure.core $ _PLUS_ – zenna 2013-02-11 15:38:30

回答

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 

因为数字是自我评估的对象。

0

取消引用解决VAR:

(type (deref (resolve '+)))