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 に答える