2024 Clojure 使用状况调查中分享您的想法!

欢迎!请参阅关于页面以了解更多关于如何使用本站的信息。

+1 投票
core.async

当一个变换器应用于通道并且变换期间发生异常时,将使用以下方式调用ex-handler:
将Throwable作为参数。

我们是否也可以将引起变换异常的值发送到ex-handler?处理变换器错误时,了解全面情况可能很有用。

如果同意这样做,并解决方案是ex-handler的一个具有值和可抛出对象第二个参数的一元操作符,调用应用将变更为

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 提出)
...