当使用任一函数创建选择时,每当发生错误时,均表示它们将值返回到任一函数的左侧,这将终止未进一步进行其他方案执行的完整模板本身,该如何做daml中的功能相同,而不是Either。
答案 0 :(得分:1)
如果执行不进一步,则错误不会被处理。而且,Left
不能简单地被忽略。考虑以下DAML函数:
steps : Bool -> Either Int Bool
steps q = do
a <- if q then Left 1 else Right "foobar"
return $ a == "foobar"
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
有关;这适用于所有“错误报告样式”操作,因为它们的全部特征是“我没有绑定到变量的值”,因此在任何{ {1}},即使您在do
上使用“替代”。
如果要继续执行,则必须在错误处 进行处理。换句话说,如果您有一个Either
,则您必须提出一个Left
才能继续进行,并且在具有错误报告功能的任何操作中都等效,因为它们< em> all 缺少必须提供的Right
值。确实,所有人的错误含义是“我无法为您的a
或您正在执行的其他任何操作提供一个值”。