4.6 KiB
4.6 KiB
uncurryRight
Transform a curried function into a function invoked with multiple arguments.
Usage
var uncurryRight = require( '@stdlib/utils/uncurry-right' );
uncurryRight( fcn[, arity][, thisArg] )
Transforms a curried function into a function invoked with multiple arguments.
function add( y ) {
return function add( x ) {
return x + y;
};
}
var fcn = uncurryRight( add );
var sum = fcn( 3, 2 );
// returns 5
To enforce a fixed number of parameters, provide an arity
argument.
function add( y ) {
return function add( x ) {
return x + y;
};
}
var fcn = uncurryRight( add, 2 );
var sum = fcn( 9 );
// throws <Error>
To specify an execution context, provide a thisArg
argument.
function addY( y ) {
this.y = y;
return addX;
}
function addX( x ) {
return x + this.y;
}
var fcn = uncurryRight( addY, {} );
var sum = fcn( 3, 2 );
// returns 5
The function supports providing both an arity
and execution context.
function addY( y ) {
this.y = y;
return addX;
}
function addX( x ) {
return x + this.y;
}
var fcn = uncurryRight( addY, 2, {} );
var sum = fcn( 3, 2 );
// returns 5
sum = fcn( 4 );
// throws <Error>
Notes
- The difference between this function and
uncurry
is the order in which arguments are applied. This function applies arguments starting from the right.
Examples
var fromCodePoint = require( '@stdlib/string/from-code-point' );
var curryRight = require( '@stdlib/utils/curry-right' );
var uncurryRight = require( '@stdlib/utils/uncurry-right' );
var uncurried;
var curried;
var abcs;
var out;
var a;
var i;
function concat() {
var len;
var out;
var i;
len = arguments.length;
out = '';
for ( i = 0; i < len; i++ ) {
out += arguments[ i ];
if ( i < len-1 ) {
out += ',';
}
}
return out;
}
// Character codes:
a = 97;
abcs = new Array( 26 );
for ( i = 0; i < abcs.length; i++ ) {
abcs[ i ] = fromCodePoint( a + i );
}
out = concat.apply( null, abcs );
// returns 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'
// Transform `concat` into a right curried function:
curried = curryRight( concat, 26 );
out = curried;
for ( i = abcs.length-1; i >= 0; i-- ) {
out = out( abcs[ i ] );
}
console.log( out );
// => 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'
// Uncurry a right curried function:
uncurried = uncurryRight( curried );
out = uncurried.apply( null, abcs );
// returns 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'