Clojure:将失败的计算表示为 core.async 的值



通常可能失败的函数返回nilsome->宏旨在链接这样的计算(看起来像那个"M"字(。问题是如何将这种方法与 core.async 一起使用,例如用于繁重async/thread计算的 park,由于通道限制,它可能会失败并且无法返回nil{:right/:left}地图是惯用语吗?您使用的任何良好做法?

您可以使用

Tupelo 库中的 with-exception-default 宏执行类似操作。 它允许您将异常替换为任意值,该值可以是"哨兵"值,以指示(以非异常方式(发生故障(例如将关键字放在 core.async 通道上(:

  (let [good (with-exception-default :failed (+ 2 3))
        bad  (with-exception-default :failed (/ 2 0)) ] ... )
good => 5
bad  => :failed

另一种方法是仅使用测试包装常规线程->

(or (-> ...<forms>...)  ; assumes `false` cannot be a result
  :failed)

最新更新