7
我在構建Clojure中的DSL時遇到了問題。這是我從其他一切中分離出來的具體問題。宏的Clojure評估
比方說,我們哈瓦一個簡單的宏:
user> (defmacro m1 [x] `'~x)
#'user/m1
它只是返回字面提供 用戶>(M1 toUpperCase) toUpperCase
如果我們呼籲對象的一切Java方法按預期工作
user> (. "a" toUpperCase)
"A"
但是如果我們用方法名替代宏調用返回方法名
user> (. "a" (m1 toUpperCase))
; Evaluation aborted.
Unable to resolve symbol: toUpperCase in this context
我想使用一些具有流暢接口像a()。b()。c()的java庫。 它映射到的Clojure爲:
(.. obj method1 method2 method3....etc)
我想創建一個替代這條產業鏈的某些部分的宏,所以我的代碼應該是這樣的:
(.. obj method1 macro1)
,並應擴大到
(.. obj method1 method2 method3)
definline也沒有幫助。我也試過
非常感謝!這是很好的建議。 – 2011-03-28 06:50:55