Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
311 views
in Technique[技术] by (71.8m points)

partial application - JavaScript curry function

I have implemented a curry function this way:

function curry (fn) {
    var slice = Array.prototype.slice,
        args = slice.apply(arguments, [1]);
    return function () {
        fn.apply(null, args.concat(slice.apply(arguments)));
    };
}

When I use the above function to do the following

function add (x, y) {
    return x + y;
}

var inc = curry(add, 1);
console.log(inc(10));

it logs undefined. Isn't 11 the expected output? What is wrong with my code?

Note: Using console.log(x, y) inside the add function logs 1 10. I don't understand why it returns undefined.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You're missing a return in your curry function.

I.e.

return function () {
    return fn.apply(null, args.concat(slice.apply(arguments)));
};

That seems to work :)


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...