甲函數來添加一個和一個:爲什麼函數的返回值沒有被評估,但宏的返回值是?
(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)引用函數轉換值,宏將代碼轉換爲其他代碼。 –