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.
