请分享您的想法,参加 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 不太了解,不知道它可能如何调用该方法。
...