当我使用任一函数创建选择时,只要发生错误就意味着它们将值返回到任一函数的左侧,这将终止完整的模板本身,该模板本身不会进一步执行其他场景,如何在中执行相同的功能daml 而不是 Either。
问问题
94 次
1 回答
1
如果执行没有进一步进行,则不处理错误。此外,Left
不能简单地忽略a。考虑这个 DAML 函数:
steps : Bool -> Either Int Bool
steps q = do
a <- if q then Left 1 else Right "foobar"
return $ a == "foobar"
a
是 a Text
,仅当是 时才Either
存在Right
。因此,如果Either
是Left
,执行将无法进行到最后一行,因为没有什么可以分配给a
。
仅仅因为你可能会得到一个Either Text Text
. 所以在这种情况下,变量也只会在它是Right
.
仅仅因为您删除了变量,它也不会改变行为。例如,
steps2 : Bool -> Either Int Bool
steps2 q = do
if q then Left 1 else Right "foobar"
return q
如果由于您消除了未使用的变量绑定而突然“继续”语义,那将是令人难以置信的不一致和混乱。所以它就停在那里Left
,就好像a <-
还在那里一样。
问题是,这不仅仅是关于Either
;这适用于所有“错误报告样式”操作,因为它们都以“我没有绑定到您的变量的值”为特征,因此do
即使您使用“替代方案”,执行也永远无法继续进行“到Either
.
如果您想继续执行,您必须在此处处理错误;换句话说,如果你有一个,如果你想让它继续运行Left
,你必须想出一个,这在任何具有错误报告功能的操作中都是等价的,因为它们都有你必须想出的缺失值。确实,错误对所有人的意义是“我无法为您或您正在做的任何其他事情提供价值”。Right
a
a <-
于 2019-11-18T16:53:02.873 回答