如何以or
条件的形式将值传递给ensure
子句?
template ABC
ensure (abcd)? (xyz) || (abc)
有没有可能这样做(可能使用其他一些语法)来传递ensure
两个谓词,其中任何一个都必须求值?
发布于 2020-01-12 22:46:03
如果您只想表达两个值中的任何一个为真的布尔表达式,则使用||
即可。
但是,您正在使用的语法表明您可能会对如下内容感兴趣(用伪代码):
if abcd is true
fail to create the contract if xyz is true
else
fail to create the contract if abc is true
ensure
子句将一个“必须为真的谓词”作为参数,否则契约创建将失败“(文档here)。
谓词只是一个返回布尔值的函数,可以是true,也可以是false。
与其他语言不同(您建议的语法似乎表明您熟悉C、C++或Java),在DAML语言中,if
是一个表达式,这意味着它返回一个值。这意味着您可以像在Java语言中使用<condition> ? <if_true> : <if_false>
结构一样使用它。
下面的例子很有希望适合你的方向:
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
https://stackoverflow.com/questions/59692291
复制相似问题