Hi,

> On Nov 7, 3:48 pm, Stuart Halloway <[EMAIL PROTECTED]> wrote:
>> The following macro in lancet defines an ant task.
>>
>>    (defmacro define-ant-task [task-name]
>>      `(def ~(symbol task-name) (create-ant-task ~task-name)))
>>
>> (At least) one of the following assumptions is wrong:
>>
>> (1) define-ant-task needs to be a macro so it can drop args into def.
>>
>> (2) define-ant-task needs to be a function because task-name needs to
>> be evaled on the way in.
>>
>> (3) using eval (which would solve the contradiction in 1 & 2) is evil
>> and should be avoided.
>>

As Rich pointed out, its unclear what you are trying to do, so I'm
making assumptions here, but this strikes me as similar to something I
encountered. I believe I got what I needed by wrapping an unquoted let
around the syntax-quote in order to force evaluation:

(defmacro definte-ant-task [task-name]
 (let [evaled-task-name task-name]  ;; Force evaluation of task-name
  `(def ~(symbol evaled-task-name) (create-ant-task ~evaled-task-name))))

Using (eval) will work, but I agree, it feels wrong to use eval which
is why I sought after this solution here.

/mike.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to