=> *(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 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.


Reply via email to