宏字符串插值/如何在字符串中取消引用?

问题描述

我有一个宏:

(defmacro test [x] `"~x")

运行后展开如下:

=> (test abc)
'~x'

为什么不扩展到 'abc'

在字符串中取消引用的正确方法是什么?

解决方法

我很困惑为什么您希望这会起作用,而且我不清楚您想要什么。 ~ 在你的例子中是一个字符串文字,所以它是一个普通的字符串字符,而不是 ~ 运算符,就像 ((fn [x] "x") 5) 返回 "x" 而不是 {{1 }}。

如果您想对传递给宏的模型进行字符串化,请使用 "5",如下所示:

str