1

假设我有一个选择,它接受一个表示计数的整数,并且我想创建一个合约多次,即多次执行某个代码块。

例如,在 Ruby 中,这可能看起来像这样:

n.times do 
  #run some code here
end

我如何在 DAML 中实现这一点?

4

1 回答 1

2

TLDR

要应用分类帐操作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]

于 2019-02-05T00:52:11.447 回答