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` 做的事情更多一些,但它确实有用,我认为它不会使事情更复杂。
用户 Eugene Pakhomov 在 发表了评论 作者: Eugene Pakhomov
我认为这是合理的,因为名称增多了会导致额外的认知负荷。有时这是有道理的,但在这个例子中我不这么认为。我甚至认为像 `if-not` 和 `when-not` 这样的东西并不是真正必要的。
用户 Eugene Pakhomov 在 发表了评论 作者: Eugene Pakhomov
啊,这次你是在说 `with-out-str`,我读错了。那个函数无论如何也是合理的,因为它处理了互操作性问题。除此之外,我想说,这比将标准输出重定向到标准错误更频繁地被使用。
用户 Jan Šuráň 在 发表了评论 作者: Jan Šuráň
我明白了,但仍然,我认为在某些情况下你可能需要它。当我需要做一些快速调试时,写宏名称比绑定绑定向量要容易得多。这样可以节省一些时间。

额外说明:我在 Slack 上链接了这个问题,我想和更多人讨论一下,我认为每个人都会有不同的看法。
用户 Sean Corfield 在 发表了评论 作者: Sean Corfield
根据我的经验,通过将 *err* 绑定到 *out* 来捕获标准错误比反方向更为常见,但是有了绑定功能后,我从未感到需要宏,所以我同意 Eugene 的观点,这个不是必要的。
我同意,这个宏会让我必须查看源代码才能理解发生了什么,而直接使用绑定表单不需要更多的空间,而且对它所做的事情来说是透明的。
同意。




顺便说一句,我无法发送少于12个字符的消息哈哈哈
...