我有一個函數,如果它存在,我必須包裝另一個函數,否則將它替換。這意味着參數的數量根據情況而變化。如何在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
塊格式我們「反向咖喱」/uncurry三個參數,它最終會看起來像這樣:
column.formatter = function(row, cell, value){
wrapFormatting(value);
}
但eslint告訴我,值是a)已經在上面的範圍內聲明,b)已定義但從未使用過。如果我改變其中一個(所以我有(row, cell, value) => val => wrapFormatting
我有他們兩個'定義,但從未使用'。
我覺得我錯過了一個把戲,因爲我不能有(row, cell, value) => value => wrapFormatting(value)
因爲這將立即調用功能,當column.formatter被調用時,它將不會被調用。
「*'(row,cell,value)=> value => wrapFormatting(value)'會立即調用函數*」 - 你爲什麼這麼認爲? – Bergi
@Bergi因爲這個位*'wrapFormatting(value)'* – Pureferret
嗯,但是你的'函數(行,單元格,值){...'包含完全相同的位。爲什麼不立即在那裏調用它? – Bergi