26 lines
		
	
	
		
			801 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
		
			801 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));
 | |
| };
 |