gpt4 book ai didi

dataweave - Dataweave 中的尾递归

转载 作者:行者123 更新时间:2023-12-02 03:07:38 27 4
gpt4 key购买 nike

有没有办法采用递归函数(如下所示)并使其成为尾递归?我有这样的输入:

{
"message": "Test ",
"read": [
{
"test": " t "
}
]
}

还有这个 Dataweave 函数

fun trimWS(item) = item match {
case is Array -> $ map trimWS($)
case is Object -> $ mapObject {
($$): $ match {
case is String -> trim($)
case is Object -> trimWS($)
case is Array -> $ map trimWS($)
else -> $
}
}
case is String -> trim($)
else -> $
}

最佳答案

我对您现有的函数进行了一些修改以简化它,并且我还在 Mule 4.2.1 下运行了一些测试。

通过构建超过 840 层深度的数据结构,我能够导航和修剪字段。我的猜测是由于数据结构和惰性计算,我能够超过 256 深度,这是 DW 2.0 引发 StackOverflow 的默认值。

您还可以通过传递运行时参数来增加默认值,其名称为 com.mulesoft.dw.stacksize(例如 com.mulesoft.dw.stacksize=500) >) 或您的系统可以处理的任何其他号码。

正如我所说,创建尾递归版本并不容易,它会使代码复杂化,与现有版本相比,它的可维护性会降低等。

即使我没有直接回答您的问题,我也希望它能有所帮助。

%dw 2.0
output application/json
var ds = {
"message": "Test ",
"read": [
{
"test": " t "
}
]
}
var deepData = (0 to 840) as Array reduce (e, acc=ds) -> {value: " TO_TRIM ",next: acc}

fun trimWS(item) = item match {
case is Array -> $ map trimWS($)
case is Object -> $ mapObject {($$): trimWS($)}
case is String -> trim($)
else -> $
}

---

trimWS(deepData)

关于dataweave - Dataweave 中的尾递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58532367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com