如何在 Daml 中调用具有动态名称的函数?
how to call function with dynamic name in Daml?
根据我们从列表传递的值,选择调用几乎没有需要调用的函数。
例如:
Choice Call: update X
let list = [FunctionX,FunctionZ,FunctionY]
list.forEach (FunctionName =>
FunctionName parameter
)
function 1 :
X:FunctionX parameter = X
function 2:
Z:FunctionZ parameter = Z
function3 :
Y:FunctionY parameter = Y
这里这个选择期望是调用函数X和函数Z 我们如何实现这个
最简单的解决方案可能是仅向选择添加一个参数并使其根据输入改变其行为。
我不完全确定你在这里寻找什么,但这可能会有所帮助:
module Main where
import Daml.Script
import qualified DA.Text
data Function = Reverse | Length | Dup
deriving (Eq, Show)
data Result = ResultInt Int | ResultText Text
deriving (Eq, Show)
execFn: Text -> Function -> Result
execFn arg = \case
Reverse -> ResultText (DA.Text.reverse arg)
Length -> ResultInt (DA.Text.length arg)
Dup -> ResultText (arg <> arg)
template ChooseYourFunctions
with
owner: Party
argument: Text
where
signatory owner
controller owner can
RunFunctions: [Result]
with
functions: [Function]
do
return $ map (execFn argument) functions
setup : Script ()
setup = script do
alice <- allocatePartyWithHint "Alice" (PartyIdHint "Alice")
exec <- submit alice do
createCmd ChooseYourFunctions with
owner = alice
argument = "hello"
result <- submit alice do
exerciseCmd exec RunFunctions with functions = [Reverse, Length, Reverse, Reverse, Dup]
debug result
return ()
这将打印出以下跟踪(来自 debug
调用):
[ResultText "olleh",ResultInt 5,ResultText "olleh",ResultText "olleh",ResultText "hellohello"]
您可以在其中看到我们正在调用提供的函数列表。
根据我们从列表传递的值,选择调用几乎没有需要调用的函数。
例如:
Choice Call: update X
let list = [FunctionX,FunctionZ,FunctionY]
list.forEach (FunctionName =>
FunctionName parameter
)
function 1 :
X:FunctionX parameter = X
function 2:
Z:FunctionZ parameter = Z
function3 :
Y:FunctionY parameter = Y
这里这个选择期望是调用函数X和函数Z 我们如何实现这个
最简单的解决方案可能是仅向选择添加一个参数并使其根据输入改变其行为。
我不完全确定你在这里寻找什么,但这可能会有所帮助:
module Main where
import Daml.Script
import qualified DA.Text
data Function = Reverse | Length | Dup
deriving (Eq, Show)
data Result = ResultInt Int | ResultText Text
deriving (Eq, Show)
execFn: Text -> Function -> Result
execFn arg = \case
Reverse -> ResultText (DA.Text.reverse arg)
Length -> ResultInt (DA.Text.length arg)
Dup -> ResultText (arg <> arg)
template ChooseYourFunctions
with
owner: Party
argument: Text
where
signatory owner
controller owner can
RunFunctions: [Result]
with
functions: [Function]
do
return $ map (execFn argument) functions
setup : Script ()
setup = script do
alice <- allocatePartyWithHint "Alice" (PartyIdHint "Alice")
exec <- submit alice do
createCmd ChooseYourFunctions with
owner = alice
argument = "hello"
result <- submit alice do
exerciseCmd exec RunFunctions with functions = [Reverse, Length, Reverse, Reverse, Dup]
debug result
return ()
这将打印出以下跟踪(来自 debug
调用):
[ResultText "olleh",ResultInt 5,ResultText "olleh",ResultText "olleh",ResultText "hellohello"]
您可以在其中看到我们正在调用提供的函数列表。