mirror of
https://github.com/nodejs/node.git
synced 2025-05-18 22:22:58 +00:00

PR-URL: https://github.com/nodejs/io.js/pull/2286 Reviewed-By: Roman Reiss <me@silverwind.io>
25 lines
784 B
JavaScript
25 lines
784 B
JavaScript
'use strict';
|
|
|
|
var toPosInt = require('../../number/to-pos-integer')
|
|
, callable = require('../../object/valid-callable')
|
|
, defineLength = require('../_define-length')
|
|
|
|
, slice = Array.prototype.slice, apply = Function.prototype.apply
|
|
, curry;
|
|
|
|
curry = function self(fn, length, preArgs) {
|
|
return defineLength(function () {
|
|
var args = preArgs ?
|
|
preArgs.concat(slice.call(arguments, 0, length - preArgs.length)) :
|
|
slice.call(arguments, 0, length);
|
|
return (args.length === length) ? apply.call(fn, this, args) :
|
|
self(fn, length, args);
|
|
}, preArgs ? (length - preArgs.length) : length);
|
|
};
|
|
|
|
module.exports = function (/*length*/) {
|
|
var length = arguments[0];
|
|
return curry(callable(this),
|
|
isNaN(length) ? toPosInt(this.length) : toPosInt(length));
|
|
};
|