2017-07-28 8 views
1

私は関数があります。存在する場合は別の関数をラップするか、そうでなければ置き換える必要があります。これは、状況によって引数の数が変化することを意味します。Javascript ES6でどうやってカレーをやり直しますか?

は、ここで私が何を意味するかだ - 列の

一覧:

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

は、いくつかはフォーマッタを持っているし、いくつかはしないでください。ここでは「ラッピング」の私の部分的な解決策は、関数の:

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ブロックフォーマッタで3つの引数をuncurry、それはこのように見える終わるだろうということです。

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

しかし、値がa)すでに上限スコープで宣言されていて、b)定義されていますが使用されていないことをeslintが教えています。私はそれらのうちの1つを変更すると(私は(row, cell, value) => val => wrapFormattingを持っていますが、それは両方とも '定義されていますが、決して使用されていません'という意味です)。

あなたは二度パラメータとしてvalueを持っているとwrapFormattingが、リターンを呼び出すことがなかったと思った理由の機能、およびcolumn.formatterが呼び出されたときに呼び出されることはありません。

+1

"*'(行、セル、値)=>値=> wrapFormatting(値) 'はすぐに関数を呼び出す*" - なぜそう思うのですか? – Bergi

+0

このビットのために@Bergi * 'wrapFormatting(value)' * – Pureferret

+0

あなたの 'function(row、cell、value){...'はまったく同じビットを含みます。それはすぐにそこに呼び出されませんでしたか? – Bergi

答えて

2

あなたは

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

わからない探していますそれ。

+0

私はどちらも即座にwrapFormattingを呼び出しませんか? – Pureferret

+1

@Pureferretいいえ、それ関数を定義しています。矢印関数に不快な場合は、あなたの質問に提示した同等の 'function'構文を使用することもできます – Bergi

関連する問題