通常可能失败的函数返回nil
:some->
宏旨在链接这样的计算(看起来像那个"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)