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 中时,它都会每次都抱怨。

所以这可能在那个编辑器中是一个特殊行为。我应该指出这一点。
by
报告警告的方法是 `Namespace.warnOrFailOnReplace`,这取决于该方法是如何被调用(通过 `intern` 或 `refer`,或者nREPL是否直接使用它)以及它检查的是哪些变量,它才会报告或不会报告。不幸的是,我对nREPL的了解不足,不知道它可能会如何调用该方法。
...