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.