你如何 uncurry/reverse 在 Javascript ES6 中使用咖喱?

How do you uncurry/reverse curry in Javascript ES6?

我有一个函数,我必须包装另一个函数(如果存在)或替换它(如果不存在)。这意味着参数的数量会根据情况而变化。

这就是我的意思 -

列列表:

const myColumns = [
    {name: 'My Field', formatter: function(row, cell, value, colDef, data){
        ... do stuff to value...
        return value;
    },
    {name: 'My Other Field'}
]

有些有格式化程序,有些没有。这是我对 'wrapping' 函数的部分解决方案:

return myColumns.map(columns => {
    function wrapFormatting(value){
        return `<span class="foobar">${value}</value>`
    }
    if( column.formatters ) {
        column.formatters = _.flow(column.formatter, wrapFormatting);
    } else {
        column.formatter = (row, cell, value) => value => wrapFormatting;
    }
})

我天真的期望是,在 else 块格式化程序中,我们 'reverse curry'/uncurry 三个参数,它最终看起来像这样:

column.formatter = function(row, cell, value){
    wrapFormatting(value);
}

但是 eslint 告诉我 value 是 a) 已经在上层作用域中声明,b) 已定义但从未使用过。如果我更改其中一个(所以我有 (row, cell, value) => val => wrapFormatting 我将它们都设为 'defined but never used'。

我觉得我漏掉了一个技巧,因为我不能有(row, cell, value) => value => wrapFormatting(value)因为它会立即调用该函数,并且在调用column.formatter时不会调用它。

您正在寻找

column.formatter = (row, cell, value) => wrapFormatting(value);

不确定为什么您认为您会两次将 value 作为参数并且从不调用 wrapFormatting 而 return 它。