Thank you very much to all! Now I completely understand the metadata behavior with the reader. I'll try to adopt eastwood, thanks for the suggestion.
Is clearly that the documentation confuses a little bit. Cheers! Andrey 2015-05-05 23:25 GMT+02:00 James Reeves <ja...@booleanknot.com>: > The documentation is rather misleading, as it implies that "obj" can be a > symbol. However, because ^ is a reader macro, it is applied to "obj" before > it is evaluated. > > Clojure maps, vectors and sets all evaluate to themselves, so attaching > metadata to the unevaluated expression via the ^ reader macro, is the same > as attaching it to the evaluated expression via with-meta. > > So: > > ^:abc foo > ^:abc [1 2 3] > > Will both attach the metadata directly to the literal value following it, > but because 'foo' evaluates to something else, the reader metadata is lost > after the symbol is evaluated. > > - James > > On 5 May 2015 at 22:01, Andrey Antukh <n...@niwi.be> wrote: > >> Thanks to both for the responses, but I stil not clearly understand. >> >> The documentation says very clearly that: >> >> In addition to with-meta, there are a number of reader macros (The >> Reader: Macro Characters) for applying metadata to the expression following >> it: >> ^{:doc "How obj works!"} obj - Sets the metadata of obj to the provided >> map. >> Equivalent to (with-meta obj {:doc "How obj works!"}) >> >> >> (def foo ^:abc [1 2 3]) -> (meta foo) -> {:abc true} >> (def foo ^:abc some-func) -> (meta foo) -> nil >> (def foo ^:abc 'some-symbol) -> (meta foo) -> nil (In clojure >> programming book uses example attaching metadata using the reader to the >> symbol, but seems it not works as expected) >> >> Is a little bit confusing. The metadata documentation says clearly that >> are equivalent, but are not equivalent. >> >> >> Thank you very much again. >> >> Regards. >> Andrey >> >> 2015-05-05 21:49 GMT+02:00 Andy- <andre.r...@gmail.com>: >> >>> In addition to James comment: IMO clojure.org/metadata should be >>> clearer about this. It's mentioned more clearly on the reader page: >>> http://clojure.org/reader#The%20Reader--Macro%20characters >>> "The metadata reader macro first reads the metadata and attaches it to >>> the next form read (see with-meta >>> <http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/with-meta> >>> to >>> attach meta to an object):" >>> >>> Stress on *next form read*. >>> >>> On Tuesday, May 5, 2015 at 2:31:40 PM UTC-4, 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 - Андрей Антух - <andrei....@kaleidos.net> / < >>>> ni...@niwi.be> >>>> http://www.niwi.be <http://www.niwi.be/page/about/> >>>> https://github.com/niwibe >>>> >>> >> >> >> -- >> Andrey Antukh - Андрей Антух - <andrei.anto...@kaleidos.net> / < >> n...@niwi.be> >> 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 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. >> > > -- Andrey Antukh - Андрей Антух - <andrei.anto...@kaleidos.net> / <n...@niwi.be > 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 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.