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

欢迎!请参阅关于页面了解此功能的相关信息。

0
ClojureScript

在 ClojureScript 中,对来自 cljs.core 符号的 {{ns-unmap}} 并不将其从当前命名空间中排除。请注意,即使在通过解除映射后,函数和宏仍然存在。

要退出,请输入: :cljs/quit

这与 Clojure 的 {{ns-unmap}} 的行为不同。尝试使用未映射的符号时,请注意适当的错误。

Clojure 1.7.0-beta1 user=> (ns-unmap 'user 'when) ;; 宏 nil

某种方式下,ClojureScript 的 {{ns-unmap}} 需要添加符号到当前命名空间的 {{:excludes}} 集中。请注意,def 特殊形式已执行此操作(在显示警告之后)。

我们有两个解决方案。0001 扩展了 {{ns}} 形式的 {{:merge}} 行为以支持 {{:excludes}},然后在 {{ns-unmap}} 中使用。如果不想使用对 {{ns}} 的增强,补丁 0002 将 {{ns-unmap}} 更新直接更新为 {{:excludes}}。

4 答案

0

评论者:dnolen

首选第二个补丁。但是,第二个补丁似乎太宽泛了。只有当符号识别核心宏或 fn 时,才应应用 {{:excludes}} 逻辑。

0

评论者:[email protected]

ns 表单的 :refer-clojure :exclude 接受任意符号并将它们添加到命名空间的 :excludes 集合中,这似乎是一个相同的权限问题。您是否希望在本次问题中提供一个解决 ns 和 ns-unmap 权限问题的补丁,还是应该将此类补丁提交到新的问题报告中?

0

评论者:dnolen

新建问题报告以修复 {{:exclude}} 不检查 {{cljs.core}} 声明变量的符号表的问题,并在此处更新补丁。

0
...