On Aug 8, 2016 1:52 PM, <fah...@gmail.com> wrote: > > 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... >
Use the source, Luke! Spend some quality time with the source code of deftype, defrecord, ns, etc. and you will not regret it. Monkey with the ns- functions to explore namespaces, interning, etc. Make sure you grok the relation between vars and values. Once you get the hang of how Clojure does it you'll find it easy to roll your own. You will almost certainly want to use some macros, but what's wrong with that? gregg -- 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/d/optout.