猜猜这段代码抛出错误
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 }
为什么会这样?
答案 0 :(得分:2)
do
块中的最后一行不能采用a <- action
的形式。相反,在您的示例中,它必须是类型f a
和f = Scenario
的表达式。整个do
块也将是Scenario a
类型。有两种方法可以解决您的示例。
pure ()
的末尾添加另一行。 pure
允许您将任意值a
嵌入到do
块的上下文中(从技术上讲,它不限于do
块,但我不会在那这里),因此它允许您将()
嵌入到Scenario
上下文中,从而为您提供类型Scenario ()
的值。cid <- manish `submit` …
进入
manish `submit` …
在您的示例中,这将导致do
块的类型为Scenario (ContractId Service)
。
1和2之间的主要区别在于,1中的test_1
类型为Scenario ()
,而2中的test_1
类型为Scenario (ContractId Service)
。对于您的示例,这种差异并不重要,因为您在任何地方都没有引用test_1
,因此这两种解决方案都是合理的。