如何在Clojure Macro中使用单引号或双引号?

时间:2015-06-17 08:46:42

标签: clojure

我正在制作一个使用单引号的宏。但是,每当我解析宏的单引号文本时,如:

'java' 

:扩展为:

(quote java')

有没有人知道解决方法,以便它不会扩展到引用的形式?

更新

我有一种解决方法。我用:

(map (fn[x]
   (if (.startsWith (str x) "(quote ") 
     (apply str "'" (rest x)) 
     x)

:这至少将'text'转换为适合我的字符串“'text'”

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试使用包含java的单引号创建一个字符串。要做到这一点,你需要使用反斜杠来逃避单引号。

"\'java\'"

你引用的是符号java',它不会给你你想要的东西。

答案 1 :(得分:1)

Clojure宏适用于clojure reader解析源文本的结果。有两个影响:

  1. 您只能获得有效的clojure数据结构作为宏的参数。
  2. 您只能从宏输出一个有效的clojure数据结构。
  3. 其中一个后果是某些语法结构不能使用宏(因为它们无法读取)并且需要不同的阅读器(意味着你不能将它们混合到普通的clojure源文件中)。

    举个例子:

    (`foo`)
    

    语法无效。