【发布时间】:2019-01-19 12:19:40
【问题描述】:
我有这两个递归函数。第一个有效,但是当我尝试将quantityColumn 函数作为callback 到第二个函数时,我收到callback is not a function 的错误。任何想法我做错了什么?
var sumColumn = function(lineNumber) {
return lineNumber === 0
? quantityColumn(0)
: quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}
sumColumn(lineCount) // returns 9
var sumColumn = function(callback, lineNumber) {
return lineNumber === 0
? callback(0)
: callback(lineNumber) + sumColumn(callback(lineNumber -1), lineNumber -1)
}
sumColumn(quantityColumn, lineCount) // callback is not a function
如果需要更多代码。这就是quantityColumn 函数的含义。另外值得注意的是,current.getSublistValue 是一个第 3 方 API (NetSuite),它基本上只返回表格中行/行的交点。
var columnValue = R.curry(function(getSublistValue, sublistId, column, i) {
return getSublistValue({
sublistId: sublistId,
fieldId: column,
line: i
})
}
)
var itemSublist(current.getSublistValue)('item')
var quantityColumn = itemSublist('quantity')
var lineCount = current.getLineCount('item') - 1 // first index is 0
quantityColumn(5) // 2
quantityColumn(4) // 1
quantityColumn(3) ...
var sumColumn = function(lineNumber) {
return lineNumber === 0
? quantityColumn(0)
: quantityColumn(lineNumber) + sumColumn(lineNumber -1)
}
sumColumn(lineCount) // returns 9
【问题讨论】:
-
如您所见
var sumColumn = function(callback, lineNumber)期望参数 1 是 `callback` (并且您需要两个参数才能正确调用该函数)。您正在调用该函数sumColumn(lineCount)它直接进入 @ 987654330@ (lineCount->callback) , 不是(lineCount->lineNumber) -
var itemSublist(current.getSublistValue)('item')是什么意思? -
我的例子错了,我确实是这样称呼的。
itemSublist(current.getSublistValue)('item')只是创建了一个partial application的函数。它们只是执行第 3 方 APIgetSublistValue所必需的值。可能还有其他“子列表”表,这就是为什么像这样对其进行咖喱很有用 -
itemSublist('quantity')返回function对吗?和quantityColumn(5) // 2也可以吗? -
请查看我的解决方案
标签: javascript recursion callback functional-programming