首页 > 解决方案 > 宏字符串插值/如何在字符串中取消引用?

问题描述

我有一个像这样的宏:

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

运行后展开如下:

=> (test abc)
'~x'

为什么不展开到'abc'?

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

标签: hy

解决方案


我很困惑为什么你期望这会起作用,我不清楚你想要什么。~在您的示例中是字符串文字,因此它是普通字符串字符,而不是运算符,与返回和 not~的方式相同。((fn [x] "x") 5)"x""5"

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

hy 1.0a1+114.g2abb33b1 using CPython(default) 3.8.6 on Linux
=> (defmacro test [x] (str x))
<function test at 0x7fe0476144c0>
=> (test abc)
"abc"

推荐阅读