1

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

(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

4

2 回答 2

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

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

于 2013-02-11T15:56:38.653 回答
0

取消引用已解析的 Var:

(type (deref (resolve '+)))
于 2013-02-11T15:56:49.940 回答