mule - 为什么 "default"关键字在某些情况下表现得像 "try + catch/orElse"

标签 mule dataweave mule4

我最近注意到 default 关键字的一个有趣行为。在某些情况下,它的作用类似于 try-catchtry-orElse

例如,如果您尝试执行以下脚本:

%dw 2.0
output application/json
---
("ABC" as Number) default "Invalid number"

您将得到作为无效数字 的输出!!。但是,如果您删除默认部分并仅尝试 ("ABC"as Number),它将抛出一个错误,提示 Cannot coerce String (ABC) to Number 这是预期的。

看起来语句的行为与原来一样

%dw 2.0
import * from dw::Runtime
output application/json
---
try(() -> ("ABC" as Number)) orElse "Invalid number"

然而,这还没有结束。我找不到这种行为的记录,但经过一些点击和试验后,我发现它只适用于以下错误:

  1. 类型强制期间的错误。尝试 ("ABC"as Number) default "default"
  2. 使用函数引发的错误 fail .尝试 (dw::Runtime::fail("ERROR") 默认 "default"

可能还有更多,但我只能从命中和试验中获取信息,因为我找不到关于此行为的文档。

我认为第一是让开发人员能够轻松地做一些事情

payload.someField as Number default 0

没有让他们在执行强制转换之前检查null 值。我的意思是,否则,如果该字段为空,它将在 payload.someField as Number 处失败,并且需要将其重写为

(payload.someField default 0) as Number 

我的问题是

  1. 这种行为是否可靠,我可以使用这种形式 payload.someField as Number default 0 而不必担心它会失败吗?
  2. 是否有针对 default 关键字的这种行为的文档?

最佳答案

关于默认行为的故事正如您所说,它具有两种完全不同的功能。

  1. 我们都知道,当左侧为 null 时,返回右侧的值。
  2. 它充当某些异常的异常处理程序(这是从 dw 1 继承的,遗憾的是我们无法更改它)

我们要处理什么样的异常?

  1. 调用不支持null的函数
  2. 任何强制异常(如您发现的异常)

这种行为是否可靠,我可以使用这种形式的 payload.someField 作为 Number default 0 而不必担心它会失败吗?

对你的回答你的问题,是的,但没有推广。我建议使用 try 进行异常处理。但是是的,我们不会改变这种行为。

是否有针对 default 关键字的这种行为的文档?

我没有在 Anypoint 文档中看到它。

关于mule - 为什么 "default"关键字在某些情况下表现得像 "try + catch/orElse",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73785223/

相关文章:

dataweave - JSON 对象忽略 null

dataweave - DW 2.0 中的多态性

csv - 在 DataWeave 2.0 中读取不带 header 的 CSV

linux - Mule Esb 从 linux 命令在后台运行

java - 从 Mule ESB 上的 java session 中读取变量

cxf - 骡 CXF 编码(marshal)响应

mule - 无法使用 `++` 、 (`String` 调用 `Array<String>` )

Dataweave数组差异

multithreading - Parallel For-Each 与 Scatter Gather in mule

Mule Studio 和社区版