mule 4中的动态函数调用



我有多种功能:

fun testadd(payload) = 
({
addition: payload.value1 as Number + payload.value2 as Number
})
fun testsub(payload) = 
({
substraction: payload.value1 as Number - payload.value2 as Number
})
fun testmultiply(payload) = 
({
multiplication: payload.value1 as Number * payload.value2 as Number
})

我想基于"的值动态地调用函数;操作">属性/元素。假设如果";操作"="testadd&然后调用testadd函数,如果";操作"="testsub">然后调用testsub函数

输入:

{
"value1" : 10,
"value2" : 20,
"Operation" : "testadd"
}

这里的替代方法是使用函数重载和文字类型。例如:

%dw 2.0
output json
fun binOp(a, b, op : "add") = a + b
fun binOp(a, b, op : "sub") = a - b
fun binOp(a, b, op : "mul") = a * b
---
binOp(10, 20, "add")

DataWeave将根据op参数的值调用正确的函数。

由于DataWeave中的函数名为lambdas,您可以将它们转换为Lambda,将它们分配为对象的值,并使用键作为名称。

示例:

%dw 2.0
output application/json
var functions={
testadd: (payload) -> {
addition: payload.value1 as Number + payload.value2 as Number
},
testsub: (payload) -> {
substraction: payload.value1 as Number - payload.value2 as Number
}
}
---
functions[payload.Operation](payload)

输出(针对问题中的输入(:

{
"addition": 30
}

或者,您可以将函数作为函数,只需在对象中按名称引用它们:

%dw 2.0
output application/json
fun testadd(payload) = {
addition: payload.value1 as Number + payload.value2 as Number
}
fun testsub(payload) = {
substraction: payload.value1 as Number - payload.value2 as Number
}
var functions={
testadd: testadd,
testsub: testsub
}
---
functions[payload.Operation](payload)

最新更新