我正在学习有关curring的知识,因此我决定尝试制作一个称为getMin
的经过咖喱的最小函数。
据我了解,这意味着我应该可以打电话
getMinimum(5)(2)(6)
,并使其返回2
。
我试图用一个简单的闭包实现这一点,然后我想到了一些返回数字而不是函数的东西。这是我的代码:
function getMin(val){
var min = val
function calc(num){
if(num<min){
// set new minimum
min = num
return num
}
else {
return min
}
}
return calc
}
var x = getMin(5) // => 5
console.log(x(6))
console.log(x(4))
console.log(x(8))
console.log(x(2))
此日志:
5
4
4
2
这不符合currying的要求。
因此,当我考虑如何更改此函数以使其返回一个函数时,我遇到了问题。每次使用数字参数调用curried函数时,它都应返回最小值(一个数字),但是,如果我正确理解这一点,则还应该返回一个函数(以便可以用另一个数字再次调用它)。如何运作?
答案 0 :(得分:3)
您需要实现一个toString
函数,如果需要原始值,则返回结果,否则返回一个函数。
function getMinimum(m) {
function min(v) {
m = Math.min(m, v);
return min;
}
min.toString = _ => m;
return min;
}
console.log(getMinimum(5)(2)(6));
console.log(getMinimum(3)(2)(1)(-1000));
答案 1 :(得分:3)
不,您是在误会科林。这并不意味着您的函数应该接受任意数量的参数(有关如何执行此操作同时允许进行多个链式调用的信息,请参见here),而不仅仅是一次应仅接受一个参数值。您的getMin
函数已经 被管理,它的签名为number -> (number -> number)
(取两个数字,返回一个)。如果不是咖喱,则必须将其称为getMin(5, 4)
。