maskArguments

Create a function that invokes a provided function according to an argument mask.

Usage

var maskArguments = require( '@stdlib/utils/mask-arguments' );

maskArguments( fcn, mask[, thisArg] )

Returns a function that invokes a provided function according to an argument mask.

function foo( a, b ) {
    return [ a, b ];
}

var bar = maskArguments( foo, [ 1, 0, 1 ] );

var out = bar( 1, 2, 3 );
// returns [ 1, 3 ]

To set the this context when invoking the provided function, provide a thisArg.

function Foo() {
    this.x = 1;
    this.y = 2;
}

Foo.prototype.scale = function scale( a, b ) {
    return [ this.x*a, this.y*b ];
};

var ctx = {
    'x': 10,
    'y': 20
};

var foo = new Foo();

var bar = maskArguments( foo.scale, [ 1, 0, 1 ], ctx );

var out = bar( 1, 2, 3 );
// returns [ 10, 60 ]

Notes

  • Only those arguments having a truthy mask value are applied to a provided function.

Examples

var filledarrayBy = require( '@stdlib/array/filled-by' );
var Uint8Array = require( '@stdlib/array/uint8' );
var add = require( '@stdlib/math/base/ops/add' );
var maskArguments = require( '@stdlib/utils/mask-arguments' );

function fill( i ) {
    return i;
}

// Create a data array:
var x = filledarrayBy( 10, 'float64', fill );

// Create a mask array:
var mask = new Uint8Array( x.length );

// "Unmask" the first element:
mask[ 0 ] = 1;

// Compute the sum of consecutive elements...
var f;
var i;
for ( i = 1; i < x.length; i++ ) {
    // "Unmask" the next element:
    mask[ i ] = 1;

    // Compute the sum:
    f = maskArguments( add, mask );
    console.log( 'sum(x_%d, x_%d) = %d', i-1, i, f.apply( null, x ) );

    // Update the mask:
    mask[ i-1 ] = 0;
}
Did you find this page helpful?