甲函数来添加一个和一个:为什么函数的返回值没有被评估,但宏的返回值是?
(defn one-plus-one [] (list + 1 1))
时调用返回:
(#object[clojure.core$_PLUS_ 0x47fa7bd5 "[email protected]"] 1 1)
相同的功能体包裹在一个宏:
(defmacro one-plus-one [] (list + 1 1))
当被叫回报:
2
为什么Clojure的期望宏返回一个可评估的表情?
编辑
答案the possible duplicate question告诉宏是如何从一个功能有所不同。但是没有回答原因。隐喻地说,我知道一个从高空遗留下来的物体会垂直下落到地面。我的问题是为什么它垂直下降?
[defn和defmacro有什么不同?](http://stackoverflow.com/questions/3667403/what-is-the-difference-between-the-defn-and-defmacro) –
你应该阅读更多关于宏我猜。您可以将宏调用看作是在编译时用宏内容替换自己的代码。因此,对于宏一加一的情况,你可以想象'(一加一)'将'(+ 1 1)'放入你的源代码中,然后和其余的源代码一起评估。 – leetwinski
重新编辑,并从[链接的问题](http://stackoverflow.com/a/3672068/425313)引用函数转换值,宏将代码转换为其他代码。 –