【发布时间】:2015-04-11 13:32:17
【问题描述】:
我尝试定义一个宏来从一种特殊形式的文本中提取信息,[0 => "0\n"],实际上是 Clojure 中的一个列表。
现在假设我只想使用宏 get-input 获取其中的 first 部分。
(println (get-input [0 => "0\n"])) ; i.e. 0
下面这个效果很好。
; this works
(defmacro get-input
[expr]
(let [input (first expr)]
input))
但是当我使用 Syntax-Quote,即反引号时,事情变得混乱了。
只需将expr 与~ 取消引用就可以了。
虽然实际上我从未使用过expr 的second 部分,即=>,但似乎它仍然在后面被评估。
CompilerException java.lang.RuntimeException: Unable to resolve symbol: => in this context
; this sucks
(defmacro get-input
[expr]
`(let [input# (first ~expr)]
input#))
我想知道第一个解决方案和第二个解决方案有什么区别。
【问题讨论】: