考虑
(defn f ^{:foo "bar"} [x] (* x x))
和
(defn g #^{:foo "bar"} [x] (* x x))
既编译又运行。
我有两个问题:首先,为什么只做(meta f)和(meta g)生产nil?我原以为他们会生产{:foo "bar"};iow,我是不是完全在元数据上吃午饭,并且我在那里定义了某种垃圾?
其次,元数据的两种语法有什么区别?看起来第二个是“标记文字”,与edn(扩展数据表示法)有关,但如果没有更多上下文或示例,我无法完全理解它。