user> (macroexpand-1 '(defn foo [x] (inc x)))
(def foo (clojure.core/fn ([x] (inc x))))
If defn is just a macro, then it seems I can do this:
user> (defn bar [] (fn ([x] (inc x))))
#'user/bar
user> (def foo (bar))
#'user/foo
user> foo
#function[user/bar/fn--10778]
But the result is a little different than doing it directly with defn:
user> (defn foo [x] (inc x))
#'user/foo
We had #'user/*bar/fn--10778* vs #'user/foo. But either way, foo is bound
to something.
Is the difference significant? It seems like it is because I tried
something similar in my project and got the following:
IllegalStateException Attempting to call unbound fn: #'p.core/default-step
clojure.lang.Var$Unbound.throwArity (Var.java:43)
p.core> default-step
#function[p.core/make-step/fn--10747]
Function default-step was def'd using make-step which returned a function
and default-step is bound, so why does the repl say it is not?
(defn make-step [some-args]
(fn ([other-args]
(some-body using-both-args))))
Basically I need to define a bunch of similar functions and am trying to
use another function to help define them (instead of using a macro). But it
seems I'm doing something wrong...
--
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/d/optout.