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 clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to