簡體   English   中英

騾子 4 中的動態 function 調用

[英]Dynamic function call in 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
})

我想根據“操作”屬性/元素的值動態調用 function。 假設如果 "Operation" = "testadd"然后調用testadd function,如果 "Operation" = "testsub"然后調用testsub function

輸入:

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

這里的另一種方法是使用 function 重載和文字類型 例如:

%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參數的值調用正確的 function。

由於 DataWeave 中的函數被命名為lambda ,您可以將它們轉換為 lambda,將它們分配為 object 的值並使用鍵作為名稱。

例子:

%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)

Output(用於問題中的輸入):

{
  "addition": 30
}

或者,您可以將函數作為函數,並在 object 中按名稱引用它們:

%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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM