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