在 DAML 中可以使用什么来代替 Either?
What can be used instead of Either in DAML?
当我使用任一函数创建选择时,无论何时发生错误都意味着它们 returns 值在任一函数的左侧,这将终止整个模板本身,不会进一步处理其他情况执行,如何在 daml 而不是 Either 中执行相同的功能。
如果执行没有进一步进行,则错误未 得到处理。此外,不能简单地忽略 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
如果语义突然 "just kept going" 因为你消除了一个未使用的变量绑定,那将是难以置信的不一致和混乱。所以它就在 Left
停在那里,就好像 a <-
还在那里一样。
问题是,这不仅仅是关于 Either
;这适用于所有 "error-reporting-style" 操作,因为它们都是 all 以 "I don't have a value to bind to your variable" 为特征的,所以执行永远不会在任何 do
中继续进行,即使你使用 "alternative" 到 Either
.
如果你想继续执行,你必须就在那里处理错误;换句话说,如果你有一个 Left
,如果你想让它继续运行,你必须想出一个 Right
,这在任何具有错误报告功能的操作中都是等价的,因为它们 所有 都缺少您必须想出的 a
值。的确,error对所有人的意义就是"I can't come up with a value for your a <-
or whatever else you're doing".
当我使用任一函数创建选择时,无论何时发生错误都意味着它们 returns 值在任一函数的左侧,这将终止整个模板本身,不会进一步处理其他情况执行,如何在 daml 而不是 Either 中执行相同的功能。
如果执行没有进一步进行,则错误未 得到处理。此外,不能简单地忽略 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
如果语义突然 "just kept going" 因为你消除了一个未使用的变量绑定,那将是难以置信的不一致和混乱。所以它就在 Left
停在那里,就好像 a <-
还在那里一样。
问题是,这不仅仅是关于 Either
;这适用于所有 "error-reporting-style" 操作,因为它们都是 all 以 "I don't have a value to bind to your variable" 为特征的,所以执行永远不会在任何 do
中继续进行,即使你使用 "alternative" 到 Either
.
如果你想继续执行,你必须就在那里处理错误;换句话说,如果你有一个 Left
,如果你想让它继续运行,你必须想出一个 Right
,这在任何具有错误报告功能的操作中都是等价的,因为它们 所有 都缺少您必须想出的 a
值。的确,error对所有人的意义就是"I can't come up with a value for your a <-
or whatever else you're doing".