On Fri, Apr 29, 2011 at 2:06 AM, Meikel Brandmeyer <m...@kotka.de> wrote:
> Hi,
>
> or just use the class name, which is what the stacktrace gives you anyway.
>
> user=> (class (fn [x] x))
> user$eval1$fn__2
> user=> (class (fn foo [x] x))
> user$eval5$foo__6
> user=> (defn bar [x] x)
> #'user/bar
> user=> (class bar)
> user$bar
> user=> (defn frob [f] (prn (class f)))
> #'user/frob
> user=> (frob (fn [x] x))
> user$eval13$fn__14
> nil
> user=> (frob (fn foo [x] x))
> user$eval17$foo__18
> nil
> user=> (frob bar)
> user$bar
> nil

Yeah, that works if you have the object in hand and it's not wrapped
or anything. Of course it has the same problem: which component are
you interested in? I guess in this case you might strip everything
before the last $, and anything starting with __ at the end, to get a
more meaningful name, though you'll sometimes get "fn" that way.

It would definitely be nice if (fn foo [...] ...) put :name foo in the
object's metadata. You could make your own version of fn that did
this, e.g.

(ns foo
  (refer-clojure :exclude (fn)))

(defmacro fn [& args]
  (let [x (first args)]
    (if-not (symbol? x)
      `(clojure.core/fn ~@args)
      `(with-meta (clojure.core/fn ~@args) {:name '~x}))))

but this wouldn't magically attach name metadata to fns generated elsewhere.

-- 
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

Reply via email to