如何在DAML中执行N次某些代码?

时间:2019-02-04 20:39:54

标签: daml

说我可以选择一个整数来代表一个计数,我想创建一个具有该次数的合同,即执行多次代码块。

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

n.times do 
  #run some code here
end

如何在DAML中实现这一目标?

1 个答案:

答案 0 :(得分:2)

TLDR

要进行N次分类帐操作,最简单的方法是使用replicateA中的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]

您可以将其读取为:

  

此函数支持具有m类型类(API或接口)的实例(实现)的任何类型Applicative。   它的第一个参数是Int   其第二个是类型为m的“效果”,提供了类型为a的值   它返回重复效果N次的结果,并将结果收集在一个列表中

您描述的create的类型为:Update (ContractId a);并且在Update实例化Applicative类型类时(可以实现),您可以使用在Applicative的{​​{1}}上工作的任何函数-自然包括{{ 1}}。

以这种方式使用时,请在类型签名中用Update替换replicateA,用Update替换m,这样:

(ContractId t)