我正在使用 Clojure 1.5.1,我刚刚在我的 (Leiningen) REPL 上遇到了以下问题:
(let [inc-x ^:some-metadata (comp inc :x)]
(meta inc-x)) ;; => nil
没有附加元数据。但是,当我写出函数时:
(let [inc-x ^:some-metadata (fn [m] (-> m :x inc))]
(meta inc-x)) ;; => {:some-metadata true}
;; more closely to `comp`
(let [inc-x ^:some-metadata (fn [& args] (-> (apply :x args) inc))]
(meta inc-x)) ;; => {:some-metadata true}
啊哈,也许comp
不能处理元数据的结果。不,它可以:
(let [inc-x (with-meta (comp inc :x) {:some-metadata true})]
(meta inc-x)) ;; => {:some-metadata true}
我想读者在这里无法^:some-metadata
正确处理。任何想法为什么?
仅供参考:constantly
显示相同的行为,complement
可能还有一系列其他行为。