假设我有一个选择,它接受一个表示计数的整数,并且我想创建一个合约多次,即多次执行某个代码块。
例如,在 Ruby 中,这可能看起来像这样:
n.times do
#run some code here
end
我如何在 DAML 中实现这一点?
假设我有一个选择,它接受一个表示计数的整数,并且我想创建一个合约多次,即多次执行某个代码块。
例如,在 Ruby 中,这可能看起来像这样:
n.times do
#run some code here
end
我如何在 DAML 中实现这一点?
要应用分类帐操作N
时间,最简单的方法是使用replicateA
函数 from DA.Action
。
daml 1.2
module ReplicateDaml
where
import DA.Action
template Demo
with
sig: Party
total: Int
where
signatory sig
testReplicate = scenario do
p <- getParty "party"
let
total = 10
p `submit` replicateA total $ create Demo with sig=p; total
的类型签名replicateA
是:
-- | `replicateA n act` performs the action n times, gathering the results.
replicateA : (Applicative m) => Int -> m a -> m [a]
您可以将其解读为:
此函数支持任何具有类型类(api 或接口)
m
的实例(实现)的类型。Applicative
它的第一个参数是一个Int
它的第二个是m
提供类型值的类型的“效果”a
它返回重复效果N次的结果,将结果收集在一个列表中
create
你描述的类型是:Update (ContractId a)
; 并且作为类型类Update
的实例化(有一个实现),Applicative
您可以使用任何适用于Applicative
's on Update
's 的函数——这自然包括replicateA
.
当以这种方式使用时,在类型签名中替换和 for ,Update
所以:m
(ContractId t)
a
replicateA : Int -> Update (ContractId t) -> Update [ContractId t]