2024 年 Clojure 调查中分享您的想法!

欢迎!有关如何使用本网站的更多信息,请参阅关于页面。

0
ClojureScript

替换在 cljs.core 中定义的符号工作正常,并会显示预期的警告。其中一个失败的情况是当一个被替换的符号最初是一个宏,并且未使用命名空间限定符调用它。示例:

`}
;;;;;;; 文件 a ;;;;;;
(ns file.a)
(defn + [& vals]
(prn "Called!")
(apply cljs.core/+ vals))
;;;;;;; 文件 b ;;;;;;
(ns file.b
(:require [file.a :refer [+]]))
(+ 1 2 ) ;; 不打印 "Called!"
(file.a/+ 1 2) ;; 打印 "Called!"
(var +) => file.a/+
+ 1 2;; 打印 "Called!" ``
}

在文件 b 中单独的符号 + 调用 cljs.core/+,尽管它被引用并且所有变量解析都解析到 file.a/+.这在从 cljs.core 中覆盖函数的情况下并不适用,例如覆盖函数 map 也可以正常工作。

`
;;;;;;; 文件 a ;;;;;;
(ns file.a)
(defn map [f coll]
(prn "map called!")
(cljs.core/map f coll))
;;;;;;; 文件 b ;;;;;;
(ns file.b
(:require [file.a :refer [map]]))

(map inc [1 2 3]) => "map called!" (2 3 4)
`
}

1 答案

0
参考: https://clojure.atlassian.net/browse/CLJS-2444(由 hlolli 报告)
...