I'm trying to implement in my clojure interpreter (in c#) the metadata reader. I read in core.clj something like
(ns ^{:doc "The core Clojure language." :author "Rich Hickey"} clojure.core) I just read: http://clojure.org/reader - Metadata (^) Metadata is a map associated with some kinds of objects: Symbols, Lists, Vector, Sets, Maps, tagged literals returning an IMeta, and record, type, and constructor calls. 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): ^{:a 1 :b 2} [1 2 3] yields the vector [1 2 3] with a metadata map of {:a 1 :b 2}. Ok, but how the reader works? I tried (def one 1) ^:foo one and it works But i tried ^:foo bar and it yields an error (Unable to resolve the symbol bar...) But then (ns ^:foo bar) IT WORKS! Where the attached form to metadata is evaluated? I thought that ^:foo bar was expanded as (with-meta bar {:foo true}) in the same way like 'a is expanded to (quote a) and then (with-meta bar {:foo true}) is passed to ns. I know that ns is a macro. So the attachment of the metadata is not yet evaluated. But when it is evaluated? Is it true that ns receives (with-meta bar {:foo true})? Or in which way the ^ reader works? I checked ns source https://github.com/clojure/clojure/blob/028af0e0b271aa558ea44780e5d951f4932c7842/src/clj/clojure/core.clj#L5304but apparently it is some magic detecting the metadata Any clue? Angel "Java" Lopez @ajlopez -- 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.