我正在制作一个使用单引号的宏。但是,每当我解析宏的单引号文本时,如:
'java'
:扩展为:
(quote java')
有没有人知道解决方法,以便它不会扩展到引用的形式?
我有一种解决方法。我用:
(map (fn[x]
(if (.startsWith (str x) "(quote ")
(apply str "'" (rest x))
x)
:这至少将'text'转换为适合我的字符串“'text'”
答案 0 :(得分:1)
看起来您正在尝试使用包含java
的单引号创建一个字符串。要做到这一点,你需要使用反斜杠来逃避单引号。
"\'java\'"
你引用的是符号java'
,它不会给你你想要的东西。
答案 1 :(得分:1)
Clojure宏适用于clojure reader解析源文本的结果。有两个影响:
其中一个后果是某些语法结构不能使用宏(因为它们无法读取)并且需要不同的阅读器(意味着你不能将它们混合到普通的clojure源文件中)。
举个例子:
(`foo`)
语法无效。