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'