Clojure では、マクロ内で作成されたマップ エントリは保持されます...
(class (eval `(new clojure.lang.MapEntry :a 7)))
;=> clojure.lang.MapEntry
...しかし、外部コンテキストからパイプスルーすると、ベクトルに折りたたまれます...
(class (eval `~(new clojure.lang.MapEntry :a 7)))
;=> clojure.lang.PersistentVector
この動作はLispReader.syntaxQuote(Object form)
condition内で定義されますif(form instanceof IPersistentCollection)
。
これが意図された動作なのか、それとも修正されるものなのか、誰にもわかりますか?