Сценарий не выполнен - PullRequest
       16

Сценарий не выполнен

1 голос
/ 06 октября 2019

Ребята, этот код выдает ошибку

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"

{"resource": "/home/Daml/learning/hackathon/daml/PaidService.daml", "owner": "_generated_diagnostic_collection_name_ # 0"," severity ": 8," message ":" /home//Daml/learning/hackathon/daml/PaidService.daml:27:3: error: \ n Последний оператор в блоке 'do' должен быть выражением\ n cid <- manish \ n submit \ n do create \ n Service \ n {поставщик = manish, выгодоприобретатель = manish, description = \ "Yay \", \ n стоимость = 1000,00, валюта = \ "USD \"} ", "source": "typecheck", "startLineNumber": 27, "startColumn": 3, "endLineNumber": 34, "endColumn": 25} </p>

Почему это происходит?

1 Ответ

2 голосов
/ 06 октября 2019

Последняя строка в do -блоке не может иметь форму a <- action. Вместо этого это должно быть выражение типа f a с f = Scenario в вашем примере. Весь do -блок также будет иметь тип Scenario a. Есть два способа исправить ваш пример.

  1. Добавьте еще одну строку в конце с pure (). pure позволяет встраивать произвольные значения a в контекст do -блока (технически он не ограничен do -блоками, но я не буду вдаваться в подробности), поэтому здесь он позволяет вамвстроить () в контекст Scenario, давая вам значение типа Scenario ().
  2. Изменить
cid <- manish `submit` …

на

manish `submit` …

InВаш пример, который приведет к тому, что do -блок имеет тип Scenario (ContractId Service).

. Основное различие между 1 и 2 состоит в том, что в 1 test_1 есть тип Scenario (), а в 2 test_1 -введите Scenario (ContractId Service). Для вашего примера это различие не имеет значения, поскольку вы нигде не ссылаетесь на test_1, поэтому оба решения разумны.

...