Metadata can be attached to many kinds of objects: functions, vars,
collections, references, etc.
Metadata added in defn is added to the global Var which is holding the
newly created function.
user=> (defn ^{:foo 42} my-fn [])
#'user/my-fn
user=> (:foo (meta #'my-fn)) ;; same as (:foo (meta (var my-fn)))
42
user=> (:foo (meta my-fn))
nil
If you later store that function e.g. in a map, you are storing a function,
not var.
Your code throws because 'var' is a special form and it accepts only a
symbol, which names a global var.
To get metadata froma function, just call
user=> (meta my-fn)
nil
By default, there is no metadata attached to the function itself. You add
some with with-meta, if you wish.
Best,
Jozef
On Friday, March 14, 2014 5:31:36 PM UTC+1, Adam Krieg wrote:
>
> I'm trying to get the meta data off a function that was stored in a map,
>
> (defn my-fun [x] x)
>
> (def fun-map {:function my-fun})
>
>
> (meta (var my-fun)) ; this works
> (meta (var (:function fun-map))) ; This fails with CompilerException
> java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to
> clojure.lang.Symbol, compiling:
>
>
> It's not clear to me what is going on here as both my-fun and (:function
> fun-map) resolve to the same value.
>
> Is this expected behavior?
>
--
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.