function setProps( meta, dtypes, obj ) {
	// Define the number of arguments:
	setReadOnly( obj, 'nargs', meta.nargs );

	// Define the number of input arrays:
	setReadOnly( obj, 'nin', meta.nin );

	// Define the number of output arrays:
	setReadOnly( obj, 'nout', meta.nout );

	// Define a read-only accessor for listing a function's supported array data types:
	setReadOnlyAccessor( obj, 'types', types );

	return obj;

	/**
	* Returns a list of array type signatures.
	*
	* @private
	* @returns {StringArray} list of signatures
	*/
	function types() {
		return dtypes2signatures( dtypes, meta.nin, meta.nout );
	}
}
Defines non-enumerable read-only properties which expose ndarray function meta data.

@param {Object} meta - function meta data
@param {NonNegativeInteger} meta.nargs - total number of arguments
@param {NonNegativeInteger} meta.nin - total number of input arrays
@param {NonNegativeInteger} meta.nout - total number of output arrays
@param {ArrayLikeObject} dtypes - list of ndarray data types
@param {(Function|Object)} obj - object on which to define properties
@returns {(Function|Object)} object on which properties were defined

@example
// Define ndarray function meta data:
var meta = {
    'nargs': 2,
    'nin': 1,
    'nout': 1
};

// Define the list of ndarray data types:
var dtypes = [
    'float64', 'float64',
    'float32', 'float32',
    'generic', 'generic'
];

// Define an object on which to set the properties:
var obj = {};

// Set the properties:
setProps( meta, dtypes, obj );

@example
// Define ndarray function meta data:
var meta = {
    'nargs': 2,
    'nin': 1,
    'nout': 1
};

// Define the list of ndarray data types:
var dtypes = [
    'float64', 'float64',
    'float32', 'float32',
    'generic', 'generic'
];

// Define a function on which to set the properties:
function abs( x, y ) {
    // Implementation...
}

// Set the properties:
setProps( meta, dtypes, abs );