实际上有很多库帮我们实现这点: https://cran.r-project.org/we...

现在我们考虑自己实现一个。参考 https://stackoverflow.com/que... 和之前的 JavaScript 实现 很快就可以自己写出来了:

Curry <- function(f, len, ...) {
    origList <- list(...);
    ret <- function(...) {
        cur <- c(list(...));
        if (length(cur) < len) {
            return(function(...) {
                return(do.call(ret, c(cur, list(...))));
            });
        }
        return(do.call(f, cur));
    };
    return(do.call(ret, origList));
};

测试:

Curry(function(x, y, z) { return(x + y + z); }, 3, 2)(c(1, 2, 3))(1);
# [1] 4 5 6

本文固定链接: http://www.js-code.com/c/c_61866.html