0

当我使用任一函数创建选择时,只要发生错误就意味着它们将值返回到任一函数的左侧,这将终止完整的模板本身,该模板本身不会进一步执行其他场景,如何在中执行相同的功能daml 而不是 Either。

4

1 回答 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。因此,如果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;这适用于所有“错误报告样式”操作,因为它们都“我没有绑定到您的变量的值”为特征,因此do即使您使用“替代方案”,执行也永远无法继续进行“到Either.

如果您想继续执行,您必须在此处处理错误;换句话说,如果你有一个,如果你想让它继续运行Left,你必须想出一个,这在任何具有错误报告功能的操作中都是等价的,因为它们都有你必须想出的缺失值。确实,错误对所有人的意义是“我无法为您或您正在做的任何其他事情提供价值”。Rightaa <-

于 2019-11-18T16:53:02.873 回答