2024 Clojure 状态调查! 中分享您的想法。

欢迎!有关本站的工作方式,请参阅 关于 页面。

0 投票
ClojureScript
如果您重新命名了一个核心 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}} 无法解析。

1 答案

0 投票
参考: https://clojure.atlassian.net/browse/CLJS-2292(由 mfikes 报告)
...