Beautiful, thanks guys.

On Thursday, November 28, 2013 10:26:05 PM UTC-8, Alex Baranosky wrote:
>
> This also works, I believe:
>
> (defmacro migrate [& migration-syms]
>   (let [migration-vars (for [sym migration-syms]
>                                `(var ~sym))]
>     `(migrate* ~@migration-vars)))
>
>
> On Thu, Nov 28, 2013 at 5:22 PM, juan.facorro 
> <[email protected]<javascript:>
> > wrote:
>
>> Hi Curtis,
>>
>> The *apply* is unnecessary if you use *unquote-splice* (*~@*), also 
>> instead of the *into* and *for* usage you could just *map* over the list 
>> of symbols.
>>
>> Here's how I would do it:
>>
>> (defmacro migrate [& syms]
>>   `(migrate* ~@(map (partial list 'var) syms)))
>>
>> (macroexpand-1 '(migrate a b c)) 
>>
>> ;= (user/migrate* (var a) (var b) (var c))
>>
>>
>> Hope it helps,
>>
>> Juan
>>
>> On Friday, November 29, 2013 5:26:14 AM UTC+8, Curtis Gagliardi wrote:
>>>
>>> I wrote a macro last night and got the feeling I did what I did in a 
>>> suboptimal way.
>>>
>>> I have have a migration function that I stole from technomancy that 
>>> takes in the vars of migration functions: 
>>> (migrate #'create-db #'add-users-table #'etc)
>>>
>>> It uses the name of the var from the metadata to record which migrations 
>>> have been run.  I wanted to try to make it so you didn't have to explicitly 
>>> pass in the vars, and just have the migrate function call var for you.  
>>> I've since decided this is a bad idea but I wrote the macro anyway just for 
>>> fun.  My first question is: could this be done without a macro?  I didn't 
>>> see how since if you write it as a function, all you recieve are the actual 
>>> functions and not the vars, but I thought I'd ask to be sure.  Assuming you 
>>> did have to write a macro, does this implementation seem reasonable?  I 
>>> felt strange about using (into [] ...).  
>>>
>>> https://www.refheap.com/21335
>>>
>>> Basically I'm trying to get from (migrate f g h) to (migrate* (var f) 
>>> (var g) (var h)), I'm not sure I'm doing it right.
>>>
>>> Thanks,
>>> Curtis.
>>>
>>  -- 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to [email protected]<javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to