请在 2024 年 Clojure 调查问卷! 中分享您的想法。

欢迎!有关如何使用本服务的更多信息,请参阅 关于 页面。

+1
core.async

当一个转换器应用于通道并在转换过程中发生异常时,ex-handler 将使用
Throwable 作为参数被调用。

我们是否也可以将导致转换异常的 val 发送到 ex-handler?在处理转换器错误时,可能需要了解全面的情况。

如果双方同意,解决方案是 ex-handler 的第二个可变参数,它接受 val 和 Throwable,并且应用的调用是

clojure.core.async.impl.channels 变为

`
(defn chan

  ...
         (try
           (add! buf val)
           (catch Throwable t
             (handle buf exh t val)))))))))

`

3 个答案

0

由:nid90 评论

在我的代码中使用 core.async/pipeline 时发现了相同的需求。编写了一个类似补丁(演示)的代码,该代码允许您在 clj 的 exh 中拥有 val。如果看起来不错,愿意编写一个完整的补丁。

0

由:d-t-w 评论

也许可以保持 ex-handler 不变,但传递一个 ex-info 而不是简单地传递捕获到的 Throwable。在 ex-info 图中提供导致异常的值,Throwable 作为原因。

0
参考:https://clojure.atlassian.net/browse/ASYNC-114(报告者:alex+import)
...