The quote special form behaves strangely on maps


I’ve tried things below:

user> 'org.clojure/clojure

user> '{org.clojure/clojure 3}
#:org.clojure{clojure 3}

user> '{org.clojure/clojure 3 :k 8}
 {org.clojure/clojure 3, :k 8}

I think that the second case must show {org.clojure/clojure 3} similar to the third trial. Why do the quote operate differently in two cases? Is it intended or a bug?

This is intended. It isn’t related to the quote, but to the printer. In Clojure 1.9 (I think that’s the right version), they introduced a new reader/printer syntax for maps whose keys all have the same namespace qualifier. Which is that you don’t need to repeat the namespace qualifier for every key, you can put it once on the whole map as in your example.

The variable print-namespace-maps controls whether the printer prints using namespaced map syntax or not.

In the third case, because the map has a mix of namespace qualifier, it can’t be printed using namespaced maps, and so it isn’t.


Thank you for kindly answer!
I updated for other questioners with your reply URL.

This is not a thing about quote. It is about map with key of namespaced keyword.

I absolutely agree with you. But I think someone, who expect the quote will preserve visually the original form, might try to find the reason in the quote section firstly. So I added the sample in the quote section. For preventing the misunderstanding, I will add your comment in that section. Thanks for your indicating.

yeah, quote won’t prevent the reader.

user=> '#(inc %)
(fn* [p1__2#] (inc p1__2#))
1 Like

Thanks for helping me widen my sight.:slightly_smiling_face:

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.