Clojure макро-оценка строк - PullRequest
1 голос
/ 21 марта 2011

Я пытаюсь создать макрос clojure, который преобразует введенный символ в строку. Однако, когда я делаю это:

(defmacro convert-to-string [something]
  `(call-converted "~something")
  )

(macroexpand '(convert-to-string convert-this))

: Я получаю:

(call-converted "~something")

: вместо:

(call-converted "~convert-this")

: кто-нибудь показывает мне, как я могу это сделать?

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

Возможно, вы захотите использовать ключевые слова (или символы в кавычках) и функцию вместо макроса:

(defn convert-to-string [x] (call-converted (name x)))
(convert-to-string :foo)
(convert-to-string 'foo)

Если вы действительно хотите макрос:

(defmacro convert-to-string [x] `(call-converted ~(name x)))
(macroexpand-1 '(convert-to-string foo))
=> (user/call-converted "foo")
0 голосов
/ 21 марта 2011

Я никоим образом не эксперт по макросам, но это решит вашу проблему:

(defmacro to-str [expr] (str expr))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...