I think the assert is working but either something eats up the thrown exception silently which would explain why def isn't reached, OR the defcomponent is never called, OR it is called with a different name param as you'd have expected. Try putting something before the assert to log if that point was ever reached.
On Thu, Feb 21, 2013 at 3:29 PM, Jim foo.bar <jimpil1...@gmail.com> wrote: > oops major typo! the correct is: > > > (defmacro defcomponent [name co] > `(let [c# ~co] > (assert (component? c#) "Not a valid IComponent") > (def ~name c#))) > > However, this doesn't work! Something weird with the assertion...If I > comment it out it works as expected, otherwise the var is unbound at the > end! strange stuff....I may end up using 'eval' as I used to... > > Jim > > > > On 21/02/13 14:20, Jim foo.bar 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.