【问题标题】:Precedence in multiple DataWeave functions多个 DataWeave 函数中的优先级
【发布时间】:2019-06-22 02:30:57
【问题描述】:

我正在学习 Mule Dev 1 课程,在模块内容和我在实践中看到的内容之间感到困惑。

模块内容声明:

"使用一系列函数时,首先执行链中最后一个函数。"

所以

filghts orderBy $.price filter ($.availableSeats > 30) 

将“过滤然后排序”。

但是,我看到了这样的声明:

payload.flights orderBy $.price filter $.price < 500 groupBy $.destination

实际上并没有先执行 groupBy。事实上,将 groupBy 放在其他任何地方都会引发错误(因为 groupBy 之后的输出模式已更改)。

关于为什么模块声明最后一个函数在显然不是这种情况时首先执行的任何想法?

谢谢!

【问题讨论】:

  • 这是您想要直接使用 MuleSoft 的内容。我相信他们会很高兴知道他们的培训模块在哪里出现了错误。
  • 不过,您的想法是对的。在您的最终代码中,orderBy 首先执行,将其输出传递给filter 的输入,filter 执行然后将其输出传递给groupBy 的输入。让groupBy首先执行的唯一方法是将其括在括号中。

标签: mule dataweave mulesoft


【解决方案1】:

(orderBy、groupBy 等)的优先级相同。 所以它会首先按价格排序,然后按价格过滤,最后按目的地分组。

这对于 dw 1 (mule 3.x) 和 dw 2 (mule 4.x) 是一样的。现在,这与 DW 版本之间的区别在于,在 DW1 中,所有这些都曾经是语言运算符,但在 DW 2 中,只是使用中缀表示法调用的函数。所以这意味着您可以使用前缀符号来编写相同的内容

filter(
       orderBy(filghts, (value, index) -> value.price), 
                           (value, index) -> value.availableSeats > 30) 

只是为了告诉你这是这个表达式的 AST。

【讨论】:

  • @jerney 这个 ast 可以使用 intellij data-weave 插件生成。 Ping 我,我可以告诉你如何
  • 仍然无法访问 slack... 会在推特上给你发私信,因为这是我知道如何联系你的唯一方式 :)
猜你喜欢
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 2019-10-01
  • 2014-07-04
  • 2015-05-05
  • 2012-06-11
相关资源
最近更新 更多