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

欢迎!请查阅 关于 页面以获取更多关于如何使用本网站的信息。

0 投票
REPL

在测试中,我注意到当我在 prepl 中评估代码时,我的某些警告测试只通过一次然后失败。每个会话只会发布一次警告

$ clojure -X clojure.core.server/start-server :name prepl :port 7777 :accept clojure.core.server/io-prepl :server-daemon false &
$ nc localhost 7777
(defn identity [x] x)
{:tag :ret, :val "#'user/identity", :ns "user", :ms 1, :form "(defn identity [x] x)"}
(binding [*out* *err*] (flush))
{:tag :err, :val "WARNING: identity already refers to: #'clojure.core/identity in namespace: user, being replaced by: #'user/identity\n"}
{:tag :ret, :val "nil", :ns "user", :ms 1, :form "(binding [*out* *err*] (flush))"}
(defn identity [x] x)
{:tag :ret, :val "#'user/identity", :ns "user", :ms 1, :form "(defn identity [x] x)"}
(binding [*out* *err*] (flush))
{:tag :ret, :val "nil", :ns "user", :ms 1, :form "(binding [*out* *err*] (flush))"}

这是预期行为吗?

1 答案

0 投票

这个阴影警告反映了 Clojure 的行为吗?

如果你说的是预期行为,我会认可的。

我是因为每次我将具有阴影函数的 NS 加载到 Cursive 的 nREPL 中时,它都会发出抱怨而提问的。

所以这可能在那个编辑器中是一个特殊的行为。我应该提到这一点。
报告警告的方法是 `Namespace.warnOrFailOnReplace`,其调用方式(通过 `intern`、`refer` 或 nREPL 直接使用)以及检查的变量和作用域都决定了是否会报告。遗憾的是,我对 nREPL 的了解不足,不知道它是如何调用该方法的。
...