Mule 4中如何根据Operation属性动态调用指定函数?
根据Operation字段动态调用函数的实现方案
已定义的运算函数
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 })
需求说明
需要根据输入payload中的Operation字段值,自动调用对应的运算函数:比如Operation为testadd时调用testadd,为testsub时调用testsub。
输入示例:
{ "value1" : 10, "value2" : 20, "Operation" : "testadd" }
实现方案
不用写冗余的if-else判断,直接用函数映射表实现动态匹配调用,代码如下:
// 保留原有的运算函数 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 }) // 创建函数映射表:键为Operation的取值,值为对应函数 var functionMap = { "testadd": testadd, "testsub": testsub, "testmultiply": testmultiply } // 动态调用核心函数 fun dynamicCall(payload) = ({ // 获取当前要执行的操作类型 var operation = payload.Operation as String // 从映射表中取出对应函数 var targetFunc = functionMap[operation] // 处理不支持的操作类型 if (targetFunc == null) { return ({error: "不支持该操作类型"}) } // 调用函数并返回结果 targetFunc(payload) })
使用方式
将输入的payload传入dynamicCall函数即可,比如传入示例中的payload,会返回:
{"addition": 30}
内容的提问来源于stack exchange,提问作者Kunal Awasthi
相关产品推荐
相关产品推荐

