Clojure: как определить функцию, которая печатает строку, не помещая кавычки в переменную - PullRequest
2 голосов
/ 02 февраля 2012

Я могу сделать:

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

Но как изменить мою функцию, чтобы мне не нужно было ставить кавычки?

(hello champ) -> Hello champ !

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Вы можете использовать макрос для достижения этой цели:

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

печать Hello World !

Редактировать: Исправьте форму, чтобы она не вводила вас в заблуждение.Спасибо за комментарий котарака.

1 голос
/ 03 февраля 2012

Это также работает (используя str вместо name ):

(defmacro hello [nsym] `(println "Hello" ~(str nsym) "!"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...