Clojure:如何定义一个函数来打印字符串而不将引号加到变量中

时间:2012-02-02 04:06:22

标签: clojure

我能做到:

(defn hello [name] (println "Hello" name "!")) <br>
(hello "champ") -> Hello champ !

但是如何改变我的功能,所以我不需要加注?

(hello champ) -> Hello champ !

2 个答案:

答案 0 :(得分:2)

您可以使用宏来实现此目的:

(defmacro hello [nsym] `(println "Hello" ~(name nsym) "!"))
(hello world)

打印Hello World !

编辑:更正表单,以免误导您。感谢kotarak的评论。

答案 1 :(得分:1)

这也有效(使用 str 而不是名称):

(defmacro hello [nsym] `(println "Hello" ~(str nsym) "!"))