daml - 如何提取党的名称?

标签 daml

在 DAML 合约中,如何从 Party 字段中提取当事方的名称?

目前,toText p给我Party(Alice) .我只想保留党的名字。

最佳答案

您关心结果字符串的精确格式表明您正在用 DAML 实现编解码器。作为一般原则,DAML 擅长作为一种建模/契约(Contract)语言,但因此具有有限的功能来支持这个问题所暗示的面向 IO 的工作。您通常最好返回 DAML 值,并在 Java/Scala/C#/Haskell/etc 中通过 Ledger API 与 DAML 接口(interface)实现编解码器。

不过,一旦您拥有 Text值您还可以访问标准 List通过 unpack 操作函数, 所以转换 "Party(Alice)""Alice"不太难:

daml 1.0 module PartyExtract where

import Base.List

def pack (cs: List Char) : Text =
  foldl (fun (acc: Text) (c: Char) -> acc <> singleton c) "" cs;

def partyToText (p: Party): Text =
  pack $ reverse $ drop 2 $ reverse $ drop 7 $ unpack $ toText p

test foo : Scenario {} = scenario
  let p = 'Alice'
  assert $ "Alice" == partyToText p

在 DAML 1.2 中扩展了标准库,因此可以简化上面的代码:
daml 1.2
module PartyExtract2
where

import DA.Text

traceDebug : (Show a, Show b) => b -> a -> a
traceDebug b a = trace (show b <> show a) $ a

partyToText : Party -> Text
partyToText p = dropPrefix "'" $ dropSuffix "'" $ traceDebug "show party: " $ show p

foo : Scenario ()
foo = do
  p <- getParty "Alice"
  assert $ "Alice" == (traceDebug "partyToText party: " $ partyToText p)

注意:我已将定义和调用留给 traceDebug因此您可以在场景跟踪输出中看到正在生成的确切字符串。

关于daml - 如何提取党的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54133342/

相关文章:

daml - 在 'date' 语句或 'create' 语句内使用 'exercise' 函数时出现问题

types - DAML 有对应的 Google 吗?

daml - 如何处理 API 调用中的 RESOURCE EXHAUSTED 错误

daml - 行使选择时如何获取当前合约id

daml - 如何访问一个选择的多个返回参数

daml - 如何将通过 DA Ledger API 接收的 DAML 元组转换为 Java 对?

node.js - 如何使用 Nodejs 绑定(bind)从 DAML 中的存档合约中获取数据?

java - 开始使用 Ledger API