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

欢迎!请访问关于页面了解这一工作的更多详细信息。

0

我认为添加一个可以将标准输出重定向到*err*的宏很有用。

(with-err-out [& body]
  `(binding [*out* *err*]
     ~@body))

1 个答案

+3

反驳:(with-err-out (do-stuff))(binding [*out* *err*] (do-stuff)) 代码长度并没有明显差异,可读性也没有很大提升。

我同意这个宏功效不大 - 例如`with-out-str`做的不止这些,但确实有帮助,我认为它并没有使事情变得更复杂。
IMO 这确实如此,因为名称过多会导致认知负荷增加。有时候这是合理的,但我不认为这次是这样。我甚至认为 `if-not` 和 `when-not` 这样的东西并不真正必要。
by
啊,我误读了你这次是在讨论 `with-out-str`。至少从这个角度来看,这个函数是合理的,因为它涉及到互操作。除此之外,我认为它比将标准输出重定向到标准错误更常用得多。
by
我明白了,但我还是认为在某些情况下,你可能需要它。当我想做些快速的调试时,写宏名比绑定绑定向量要容易得多。这样可以节省时间。

顺便说一下:我已经在 slack 上链接了这个问题,我想和更多人讨论一下,我认为这是一个每个人都可以有不同的看法的事情。
by
在我的经验中,通过将 *err* 重定向到 *out* 来捕获标准错误比相反的情况更常见,但是在绑定可用的情况下,我从未感到需要宏,所以我同意 Eugene 的观点,这不是必要的。
by
我同意,这个宏会让我不得不查看源代码来理解发生了什么,而直接使用绑定形式则不占用更多空间,并且对所做操作更加透明。
同意。




后话:我不能发送少于12个字符的消息,哈哈。
...