我怎样才能得到类似的东西:
(my-macro name) => (foo "foo-transformed-arg-name")
我只得到
(foo \#" foo-transformed-arg-name \#")
如何避免宏输出中的 #"?
我怎样才能得到类似的东西:
(my-macro name) => (foo "foo-transformed-arg-name")
我只得到
(foo \#" foo-transformed-arg-name \#")
如何避免宏输出中的 #"?
(defmacro foo (sym)
(symbol-name sym))
或者
(defmacro foo (sym)
(string-downcase (symbol-name sym)))
我不明白你为什么需要这样的宏,但你会最清楚。
这可能是你想要做的:
(defmacro static-string (func &rest characters)
`(,func ,(coerce characters 'string)))
如果您需要定义一些字符串常量而不是在运行时创建它们,也许这可能是有意义的......
这是我认为您能够得出当前结果的唯一方法:
(defmacro quote-symbol-quote (func symbol)
(list func #\" symbol #\"))
Stackoverflow 突出显示具有误导性。您在结果中得到的是一个使用三个参数调用的函数:引号字符、符号foo-transformed-arg-name
和引号字符。
决议非常简单。我真正的问题是如何将宏的 mi 参数符号转换为字符串。
(my-macro foo) => (other-func "foo")
那就是将 sybol foo 转换为“FOO”。为此,我使用了符号名称功能