使用声明的函数与内联 lambda 表达式

Using a declared function vs an inline lambda-expression

受到 this question and based on the signature of filter from this documentation page 的启发,您能否解释以下 DW 表达式失败的原因:

%dw 2.0
output application/json

var fn = <T>(v:T,i:Number): Boolean -> v > 5
---
1 to 10 filter fn

这在我看来像是与中缀符号预处理的冲突,它会自动创建一个带有 $ 符号的匿名函数。这就是 fn($) 起作用的原因;创建它的预处理似乎不够聪明,无法识别右侧何时是函数引用。这似乎是一件坏事,因为函数应该首先 class...

使用前缀表示法工作正常..

这个有效:

filter(1 to 10, fn)

所以这个应该工作:

(1 to 10) filter fn

但是预处理会自动将其包装在匿名函数中,即使您已经传入了具有正确签名的函数。

除了@Michael Jones 的回答,请注意范围不是数组,但它是自动强制转换的。我使用了一个函数而不是一个闭包变量,并且只得到了一个关于自动强制转换的警告:

%dw 2.0
output application/json

fun fn<T>(v:T,i:Number): Boolean = v > 5
---
1 to 10 filter fn($,$$)