=> *(defn (symbol (str "a" "b")) [x] x)*
IllegalArgumentException First argument to defn must be a symbol
clojure.core/defn (core.clj:277)
maybe allow ~ like this:
=>* (defn ~(symbol (str "a" "b")) [x] x)*
IllegalArgumentException First argument to defn must be a symbol
clojure.core/defn (core.clj:277)
to act like this:
=> *(eval (backtick/template (defn ~(symbol (str "a" "b")) [x] x)))*
#'util.funxions/ab
I know you'll want to suggest something like this instead:
=> *(defmacro dedefn [zsym]
`(defn ~(eval zsym) [x#] x#))*
#'util.funxions/dedefn
=> *(dedefn (symbol (str "a" "b")))*
#'util.funxions/ab
which is almost good, except if you want to place extra checks on the input
like so:
=> *(defmacro dedefn [zsym]
(let [z (eval zsym)
_ (assert (symbol? z))
]
`(defn ~z [x#] x#)
)
)*
#'util.funxions/dedefn
=> *(dedefn (symbol (str "a" "b")))*
#'util.funxions/ab
=> *(dedefn (str "a" "b"))*
AssertionError Assert failed: (symbol? z) util.funxions/dedefn
(NO_SOURCE_FILE:3)
it works but you cannot test them since they happen at compile time, ie.
=> *(clojure.test/is (thrown? AssertionError (dedefn (str "a" "b"))))*
CompilerException java.lang.AssertionError: Assert failed: (symbol? z),
compiling:(NO_SOURCE_PATH:1:42)
=> *(clojure.test/is (thrown? AssertionError (throw (new AssertionError))))*
#<AssertionError java.lang.AssertionError>
=> *(clojure.test/is (thrown? AssertionError 1))*
FAIL in clojure.lang.PersistentList$EmptyList@1 (NO_SOURCE_FILE:1)
expected: (thrown? AssertionError 1)
actual: nil
nil
I guess there's no way to get rid of that eval that's happening there
outside of the ` in the macro, and it kinda makes sense to be that way.
I have a feeling there's a workaround to be able to catch the exception but
I haven't explored it yet...
Any thoughts?
--
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 [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.