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`。这个函数至少是合理的,因为它处理互操作性。除此之外,我认为它比重定向stdout到stderr使用得更加频繁。
我明白你的观点,但是我还是认为在某些情况下你可能需要它。当我想要进行一些快速调试时,写下宏名比用绑定向量绑定要简单得多。这样可以节省一些时间。

附言:我已经在这个Slack问题上链接了此问题,我想与其他人讨论一下,我认为这是一个每个人都有不同意见的问题。
根据我的经验,通过将*err*重定向到*out*来捕获stderr比反过来更常见,但是有了绑定可用,我从未觉得需要一个宏,所以我同意Eugene的看法,这并不是必需的。
by
我同意,使用宏需要我查看源代码来理解发生了什么,而直接使用绑定形式则不占用更多空间,且明确知道它做了什么。
by
同意。




(P.S.:我不能发送少于12个字符的消息,哈哈)
...