如果您重新命名了一个核心 Var,当您重新定义它时,您将收到一个警告。这就像是 {{:rename}} 不暗示 {{:exclude}}。
使用 QuickStart JAR 复制
$ java -jar cljs.jar -m cljs.repl.node
ClojureScript Node.js REPL 服务器正在监听 52319
要退出,请输入::cljs/quit
cljs.user=> (ns foo.core (:refer-clojure :rename {map clj-map}))
nil
foo.core=> (map inc [1 2])
(2 3)
foo.core=> (def map {:a :b})
WARNING: map 已经指向: cljs.core/map 被替换为: foo.core/map 在第 1 行 <cljs repl>
#'foo.core/map
foo.core=> map
{:a :b}
foo.core=> (clj-map inc [1 2])
(2 3)
与 Clojure 比较
user=> (ns foo.core (:refer-clojure :rename {map clj-map}))
nil
foo.core=> (map inc [1 2])
CompilerException java.lang.RuntimeException: 无法在当前上下文中解析符号:map,编译:(/private/var/folders/gx/nymj3l7x4zq3gxb97v2zwzb40000gn/T/form-init8370940485091648461.clj:1:1)
foo.core=> (def map {:a :b})
#'foo.core/map
foo.core=> map
{:a :b}
foo.core=> (clj-map inc [1 2])
(2 3)
请注意,您不能通过简单地在上面的 {{map}} 上添加显式的 {{:exclude}} 来解决这个问题。虽然这适用于当前的 ClojureScript 编译器,但在 Clojure 中会出错,使别名符号 {{clj-map}} 无法解析。