Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 复合函数上的元数据(即使用comp时)_Clojure_Metadata - Fatal编程技术网

Clojure 复合函数上的元数据(即使用comp时)

Clojure 复合函数上的元数据(即使用comp时),clojure,metadata,Clojure,Metadata,我正在使用Clojure 1.5.1,在我的(Leiningen)REPL中遇到了以下问题: 没有附加元数据。但是,当我写出函数时: (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] (-> (a

我正在使用Clojure 1.5.1,在我的(Leiningen)REPL中遇到了以下问题:

没有附加元数据。但是,当我写出函数时:

(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}
我猜读者无法正确处理这里的一些元数据。你知道为什么吗


FYI
不断地显示出相同的行为,
补足
,可能还有一系列其他行为。

我想读者应该这样做,并将元数据附加到表单
(comp inc:x)
,这是一个常规函数调用。然后对表单求值并返回一个函数,该函数不继承元数据。另一方面,
fn
是一种特殊的表单,处理方式不同(虽然在文档中没有找到明确的信息)。

我也想知道!有道理。读取器将元数据附加到它遇到的表单,而不是它们的结果(因为它无法知道)。我没想到,所以,谢谢!
(let [inc-x (with-meta (comp inc :x) {:some-metadata true})]
  (meta inc-x)) ;; => {:some-metadata true}