使用声明的函数与内联 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($,$$)
受到 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($,$$)