在DAML中可以用什么代替Either?

时间:2019-11-16 08:18:46

标签: daml

当使用任一函数创建选择时,每当发生错误时,均表示它们将值返回到任一函数的左侧,这将终止未进一步进行其他方案执行的完整模板本身,该如何做daml中的功能相同,而不是Either。

1 个答案:

答案 0 :(得分:1)

如果执行不进一步,则错误不会被处理。而且,Left不能简单地被忽略。考虑以下DAML函数:

steps : Bool -> Either Int Bool
steps q = do
  a <- if q then Left 1 else Right "foobar"
  return $ a == "foobar"

aText,仅当EitherRight时才存在。因此,如果EitherLeft,则执行将无法进行到最后一行,因为没有内容可分配给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或您正在执行的其他任何操作提供一个值”。