如何ensure
以条件的形式将值传递给子句or
?
template ABC
ensure (abcd)? (xyz) || (abc)
是否可以这样做(可能使用其他语法)来传递ensure
两个谓词,其中任何一个都必须被评估?
如何ensure
以条件的形式将值传递给子句or
?
template ABC
ensure (abcd)? (xyz) || (abc)
是否可以这样做(可能使用其他语法)来传递ensure
两个谓词,其中任何一个都必须被评估?
如果您只想表达两个值中的任何一个为真的布尔表达式,||
就可以了。
但是,您使用的语法表明您可能有兴趣表达以下内容(在伪代码中):
if abcd is true
fail to create the contract if xyz is true
else
fail to create the contract if abc is true
该ensure
子句将“谓词必须为真,否则合同创建将失败”作为参数(此处的文档)。
谓词只是一个返回布尔值(真或假)的函数。
与其他语言相反(您建议的语法似乎表明您熟悉 C、C++ 或 Java),在 DAMLif
中是一个表达式,这意味着它返回一个值。这意味着您可以像使用<condition> ? <if_true> : <if_false>
Java 中的构造一样使用它。
以下示例有望进入您的方向:
daml 1.2
module Main where
template Main
with
owner : Party
cond1 : Bool
cond2 : Bool
cond3 : Bool
where
signatory owner
ensure if cond1 then cond2 else cond3 -- HERE!
test = scenario do
p <- getParty "party"
submit p do create $ Main p True True False
submit p do create $ Main p False False True
submitMustFail p do create $ Main p False True False
请注意,根据具体情况,您可能希望使用布尔运算符将相同的子句表示为单个条件:
ensure cond1 && cond2 || cond3