that's much better, evaluated only once, thanks.
On Thu, Feb 21, 2013 at 3:20 PM, Jim foo.bar <jimpil1...@gmail.com> wrote: > I settled for: > > (defmacro defcomponent [name co] > `(let [c# ~co] > (assert (component? c# "Not a valid IComponent")) > (def ~name c#))) > > Jim > > > On 21/02/13 14:18, AtKaaZ wrote: > > that one doesn't actually work, maybe, not sure why exactly but the > assert is ignored > > => (def component? number?) > #'runtime.q/component? > > => (defmacro defcomponent [name co] > `(assert (component? ~co) "Not a valid IComponent") > `(def ~name ~co)) > #'runtime.q/defcomponent > > => (defcomponent a "a") > #'runtime.q/a > > > The `(do ...) one works though, > => (defmacro a [] > `(println 1) > `(println 2) > ) > #'runtime.q/a > => (a) > 2 > nil > > => (defmacro a [] > `(do > (println 1) > (println 2) > ) > ) > #'runtime.q/a > => (a) > 1 > 2 > nil > > > > > On Thu, Feb 21, 2013 at 3:14 PM, Jim foo.bar <jimpil1...@gmail.com> wrote: > >> I tried this and it works, but I need 2 backticks and I'm essentially >> generating the assert-form when the macro is called...I'd like to generate >> only the def-form at run-time... >> >> (defmacro defcomponent [name co] >> `(assert (component? ~co) "Not a valid IComponent") >> `(def ~name ~co)) >> >> it looks ugly doesn't it? >> >> Jim >> >> >> >> >> On 21/02/13 14:11, AtKaaZ wrote: >> >> or you could place the assert inside the backquote >> >> >> On Thu, Feb 21, 2013 at 3:10 PM, Jim foo.bar <jimpil1...@gmail.com>wrote: >> >>> On 21/02/13 14:07, Jim foo.bar wrote: >>> >>>> Hi all, >>>> >>>> I''d like to have a macro like the following but preferably without the >>>> 'eval' inside the assertion form: >>>> >>>> (defmacro defcomponent [name co] >>>> (assert (component? (eval co)) "Not a valid IComponent") >>>> `(def ~name ~co)) >>>> >>>> If I don't use eval, everything works as long as I pass a var >>>> in...However if I pass in something like (String. "jam") it is not being >>>> evaluated and thus is a list not an object...and it will never satisfy >>>> IComponent. >>>> >>>> any thoughts? >>>> thanks in advance :) >>>> >>>> Jim >>>> >>>> >>>> >>> I could have phrased this better...One of my arguments has to NOT be >>> evaluated (name) but the other needs to be evaluated (co) so I can assert >>> whatever I want to assert on it...I cannot use 'defn' (it will cause 'name' >>> to be evaluated) so my only option is a macro that forces eval on the >>> second arg, yes? >>> >>> >>> Jim >>> >>> -- >>> -- >>> 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. >>> >>> >>> >> >> >> -- >> Please correct me if I'm wrong or incomplete, >> even if you think I'll subconsciously hate it. >> >> -- >> -- >> 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. >> >> >> >> >> -- >> -- >> 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. >> >> >> > > > > -- > Please correct me if I'm wrong or incomplete, > even if you think I'll subconsciously hate it. > > -- > -- > 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. > > > > > -- > -- > 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. > > > -- Please correct me if I'm wrong or incomplete, even if you think I'll subconsciously hate it. -- -- 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.