如何强制评估?

时间:2010-09-12 21:23:25

标签: clojure

在使用quote / unquote玩了一段时间后,我想做一个技巧,但它不想做。这就是我做了什么以及出了什么:

user=> (let [x '#(inc 1)] `(1 ~x))
(1 (fn* [] (inc 1)))

但我想要的是:

(1 2)
你能帮帮我吗? :)

并解释你正在使用的Clojure的“部分”......

2 个答案:

答案 0 :(得分:3)

您可以使用eval

user=> (let [x `(inc 1)] 
         (eval `(list 1 ~x)))
(1 2)

或更常规:

user=> (defmacro foo [x] 
        `(list 1 ~x))
#'user/foo
user=> (foo (inc 1))
(1 2)

答案 1 :(得分:1)

这会像你想要的那样工作:

user> (let [x (#(inc 1))] `(1 ~x))
;=> (1 2)