Stu H. mentions this in his book.
The briefest way to explain it is with the following code:
user=> (= #^{:jumping true} {:name "Wubbie", :email
"
wub...@mgail.com"} #^{:jumping true} wubbie)
false
In the case of "#^{metadata} symbol" you are adding the metadata to
the symbol, but then the symbol gets evaluated and it's *value* is
returned, not the metadata.
Maybe this makes it more clear?
user=> (meta #^{:jumping true} wubbie)
nil
I'm very much a Clojure n00b, but I would also expect the behavior you
were expecting. I wonder if this implementation of #^ was intended,
or if this was just an oversight? I think there is something lacking
in my fundamental knowledge of Clojure, and that's why this has yet to
make complete sense to me.