I apologise...this works almost perfectly:
(defmacro defcomponent [name co]
`(let [c# ~co]
(assert (component? c#) "Not a valid IComponent")
(def ~name c#)))
the only slight problem is the error thrown which has the gensym symbol
in the flailing condition...Well, I can't have everything can I? :)
Jim
On 21/02/13 14:51, AtKaaZ wrote:
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
<mailto: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 <mailto: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 <mailto: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 <mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto:clojure%2bunsubscr...@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 <mailto: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
<mailto: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
<mailto: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 <mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto:clojure%2bunsubscr...@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
<mailto: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
<mailto: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
<mailto: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
<mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto:clojure%2bunsubscr...@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.