通常可能失败的函数返回nil
:some->
宏被设计为链式计算(看起来像#34; M" word)。问题是如何将此方法与core.async一起使用,例如park for heavy async/thread
计算可能会失败并且由于通道限制而无法返回nil
。 {:right/:left}
映射是惯用的吗?你使用的任何好的做法?
答案 0 :(得分:0)
您可以使用with-exception-default
宏from the Tupelo library执行与此类似的操作。它允许您用任意值替换异常,该值可以是“sentinal”值以指示(以非异常方式)发生故障(例如将关键字放在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)