我有一系列的计算。任何步骤都可能失败。如果步骤失败,则应使用消息中止整个过程。
+ IO Monads。
我应该注意其他解决方案吗?这个问题的标准'Clojure方式'是什么?
我正在使用https://github.com/kovasb/gamma通过ClojureScript在WebGL中设置GLSL着色器。典型的程序包括:
使用程序
分配VertexBufferObjects
进行实际通话。
任何这些步骤都可能失败(着色器无法编译,不再有BufferObjects,格式错误等等)
在失败时,我希望其他所有内容都终止,以获取错误并修复它。处理这个问题的典型“Clojure方式”是什么? (在Haskell中,它是EitherT IO Monad)
答案 0 :(得分:1)
虽然我不确定它是否适用于您的具体情况,但{C} {C}中的some->宏通常用于可能失败的计算序列(其中“fail”=“return nil”)。
答案 1 :(得分:0)
最简单的方法是使用Java异常。然而,抓住错误并处理。
一个小的改进是使用with-exception-default
from the Tupelo library.示例用法是这样的:
(with-exception-default 666
(Long/parseLong "123"))
;=> 123
(with-exception-default 666
(Long/parseLong "12xy3"))
;=> 666