方案执行失败

时间:2019-10-05 22:09:49

标签: daml

猜猜这段代码抛出错误

daml 1.2

module PaidService where

template Service
  with
    provider : Party
    beneficiary : Party
    description : Text
    cost : Decimal
    currency : Text
  where
    signatory provider,beneficiary

    controller beneficiary can
      Transer   : ContractId Service
        with nextbeneficiary : Party
        do
          create this with beneficiary = nextbeneficiary


test_1 = scenario do
  beth <- getParty "beth"
  manish <- getParty "manish"
  harsha <- getParty "harsha"

  cid <- manish submit do
    create Service 
      with
        provider = manish
        beneficiary = manish
        description = "Yay"
        cost = 1000.00
        currency = "USD"

{     “资源”:“ / home / Daml / learning / hackathon / daml / PaidService.daml”,     “所有者”:“ _ generation_diagnostic_collection_name_#0”,     “严重程度”:8     “ message”:“ /home//Daml/learning/hackathon/daml/PaidService.daml:27:3:error:\ n'do'块中的最后一条语句必须是表达式\ n cid <-manish \ n提交\ n做创建\ n服务\ n {提供者= manish,受益人= manish,描述= \“是\”,\ n费用= 1000.00,货币= \“ USD \”}“,     “ source”:“ typecheck”,     “ startLineNumber”:27,     “ startColumn”:3,     “ endLineNumber”:34,     “ endColumn”:25 }

为什么会这样?

1 个答案:

答案 0 :(得分:2)

do块中的最后一行不能采用a <- action的形式。相反,在您的示例中,它必须是类型f af = Scenario的表达式。整个do块也将是Scenario a类型。有两种方法可以解决您的示例。

  1. pure ()的末尾添加另一行。 pure允许您将任意值a嵌入到do块的上下文中(从技术上讲,它不限于do块,但我不会在那这里),因此它允许您将()嵌入到Scenario上下文中,从而为您提供类型Scenario ()的值。
  2. 更改
cid <- manish `submit` …

进入

manish `submit` …

在您的示例中,这将导致do块的类型为Scenario (ContractId Service)

1和2之间的主要区别在于,1中的test_1类型为Scenario (),而2中的test_1类型为Scenario (ContractId Service)。对于您的示例,这种差异并不重要,因为您在任何地方都没有引用test_1,因此这两种解决方案都是合理的。