请在 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`比这做了更多,但它确实有所帮助,并且我认为它并不会使事情变得更复杂。
在我看来这是正确的,因为名称的泛滥会导致额外的认知负担。有时这是有道理的,但我不认为在这种情况下是这样。我甚至会争论说,`if-not` 和 `when-not` 这样的东西并不是真的需要的。
啊,这回你谈的是 `with-out-str`,是我看错了。这个函数至少在处理互操作时是合理的。除此之外,我认为这比将标准输出重定向到标准错误更常用。
我明白了你的观点,但我还是认为有些情况下你可能需要它。当我想要快速进行调试时,写成宏名比用绑定向量绑定更容易。这样可以节省一些时间。

附言:我已经将这个问题链接到 Slack 上,我想和其他人更多地讨论这个问题,我认为这是一个每个人都可以有不同的看法的问题。
根据我的经验,通过将 `err` 绑定到 `out` 来捕获标准错误比反过来更常见,但是有了绑定,我从未觉得需要一个宏,所以我和 Eugene 的看法一样,这并不必要。
我同意,这个宏需要我查看源代码才能理解发生了什么,而直接使用绑定表单则不需要更多空间,并且清楚了解它做了什么。
同意。




备注:我无法发送少于12个字符的消息,哈哈
...