2024 Clojure状态调查中分享您的想法!

欢迎!请查看关于页面,了解有关此如何工作的更多信息。

+1
core.async

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

我们是否也可以将导致转换异常的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中拥有val在exh。如果这似乎很合适,我很乐意编写一个完整的修补程序。

0

评论者:d-t-w

也许可以将ex-handler保持原样,但传递一个包含引起异常的值的ex-info而不是简单地传递捕获到的Throwable。

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