【发布时间】:2022-10-07 16:33:21
【问题描述】:
我最近注意到default 关键字的一个有趣行为。在某些情况下,它的作用类似于try-catch 或try-orElse。
例如,如果您尝试执行以下脚本:
%dw 2.0
output application/json
---
(\"ABC\" as Number) default \"Invalid number\"
你会得到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\"
然而,这还不是结束。我找不到这种行为记录在案,但经过一些点击和试验后,我发现它仅适用于以下错误:
- 类型强制期间出错。试试
(\"ABC\" as Number) default \"default\" - 使用函数
fail引发的错误。试试(dw::Runtime::fail(\"ERROR\") default \"default\"可能还有更多,但我只能从命中和试验中获取信息,因为我找不到有关此行为的文档。
我认为 #1 是让开发人员能够轻松地做类似的事情
payload.someField as Number default 0无需他们检查
null值前做胁迫。我的意思是,否则,如果该字段为空,它将在payload.someField as Number失败,这将需要重写为(payload.someField default 0) as Number我的问题是
- 这种行为可靠吗?我可以使用
payload.someField as Number default 0这个表单而不用担心它会失败吗? -
default关键字的这种行为是否有文档?
- 这种行为可靠吗?我可以使用