Доступ к локальному из одного макроса в другом выполняется в области let - PullRequest
0 голосов
/ 28 апреля 2010

Будь нежным, так как мой макрофу слаб.

Я хотел бы сделать что-то вроде этого:

(defmacro foo [x] `(dosync (alter x# conj x)))
(defmacro bar [] `(let [x# (ref [])] (foo 3)))

Возможно ли это? Я не могу просто (let [x ..] ..) из-за захвата символов.

ПРИМЕЧАНИЕ: я знаю, что этот пример тривиален и не достоин макросов, но это самый простой пример, который я могу придумать.

1 Ответ

1 голос
/ 28 апреля 2010

Мне нужно было форсировать захват символов.

(defmacro foo [x] `(dosync (alter ~'x conj x)))
(defmacro bar [] `(let [~'x (ref [])] (foo 3)))

Хотя это опасно, если вы не разбираетесь в макросах полностью, это работает.

...