首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在`ensure`子句中对两个条件中的任何一个求值?

如何在`ensure`子句中对两个条件中的任何一个求值?
EN

Stack Overflow用户
提问于 2020-01-11 14:46:55
回答 1查看 123关注 0票数 0

如何以or条件的形式将值传递给ensure子句?

代码语言:javascript
运行
复制
template ABC

ensure (abcd)? (xyz) || (abc)

有没有可能这样做(可能使用其他一些语法)来传递ensure两个谓词,其中任何一个都必须求值?

EN

Stack Overflow用户

回答已采纳

发布于 2020-01-12 22:46:03

如果您只想表达两个值中的任何一个为真的布尔表达式,则使用||即可。

但是,您正在使用的语法表明您可能会对如下内容感兴趣(用伪代码):

代码语言:javascript
运行
复制
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>结构一样使用它。

下面的例子很有希望适合你的方向:

代码语言:javascript
运行
复制
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

请注意,根据情况,您可能希望使用布尔运算符将相同的子句表示为单个条件:

代码语言:javascript
运行
复制
ensure cond1 && cond2 || cond3
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59692291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档