Если вы просто хотите express логическое выражение, для которого любое из двух значений истинно, подойдет ||
.
Синтаксис, который вы используете, тем не менее, предполагает, что вас может заинтересовать выражая что-то вроде следующего (в псевдокоде):
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), в DAML if
является выражением, означающим, что оно возвращает значение. Это означает, что вы можете использовать его так же, как и конструкцию <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
Примечание что в зависимости от ситуации вы можете захотеть express того же предложения, что и отдельное условие, используя логические операторы:
ensure cond1 && cond2 || cond3