>From your comments, I suspect this may be a source of confusion as well:
When you have something like (defn ^{:doc "Increments"} a-fn [x] (+ x 1))
the metadata is attached to the symbol at read time. However, during the
compilation process, the metadata on the symbol is transferred to the Var
that holds the function created. If you want to access this metadata you
have to access the Var itself, not the function.
user=> (meta a-fn)
nil
user=> (meta #'a-fn)
{:ns #<Namespace user>, :name a-fn, :file "NO_SOURCE_PATH", :column 1,
:line 1, :arglists ([x]), :doc "Increments"}
The #' syntax is shorthand for accessing the Var. You can see this process
in the following code:
(let [fn-def-sym (with-meta 'b-fn {:here true})
fn-def-code `(defn ~fn-def-sym [x#] (+ x# 1))]
(eval fn-def-code))
#'user/b-fn
user=> (b-fn 2)
3
user=> (meta b-fn)
nil
user=> (meta #'b-fn)
{:ns #<Namespace user>, :name b-fn, :file "NO_SOURCE_PATH", :here true,
:column 1, :line 1, :arglists ([x__769__auto__])}
The important thing here is that the definition code is manually built up
using a symbol that has metadata given manually, which is then transferred
to a Var when the code is evaluated.
On Tuesday, May 5, 2015 at 1:31:40 PM UTC-5, Andrey Antukh wrote:
>
> Hi!
>
> I have some trouble with clojure metadata / reader and I do not know if
> I'm doing something wrong.
>
> I have this code:
>
> (defn some-func [])
>
> (def func ^:abc some-func)
>
> (assert (= (meta func) {:abc true}))
>
> (def data [[:bar (with-meta some-func {:abc true})]
> [:baz ^:abc some-func]])
>
> (assert (= (meta (get-in data [0 1])) {:abc true}))
> (assert (= (meta (get-in data [1 1])) {:abc true}))
>
> It fails in the first assert and in the last (if I comment the first one
> obviously). I do not understand why that form of metadata does not works
> as I expect (http://clojure.org/metadata)
>
> Thank you very much.
>
> Regards.
> Andrey
>
> --
> Andrey Antukh - Андрей Антух - <[email protected] <javascript:>> / <
> [email protected] <javascript:>>
> http://www.niwi.be <http://www.niwi.be/page/about/>
> https://github.com/niwibe
>
--
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.