assign_option_aliases

From WeBWorK_wiki
Jump to navigation Jump to search


assign_option_aliases -- utility subroutine

Description

This utility subroutine can be used within any subroutine, evaluator or filter which uses options. It provides a uniform way to alias option values. For example the domain of a function tested by fun_cmp can be specified either by limits => [0,5] (the principle option) or by domain => [0,5] . (domain is an alias for limits).

Syntax

set_option_aliases($rh_options, %alias2option )

Params

$rh_options -- reference to the hash containing the options received by the parent subroutine
%alias2option-- contains a list of possible aliases and the option they are assigned to:
%alias2option = ( alias1 => option1, alias2 => option1, alias3 => option2 )

Action

If the option itself is defined in the options received by the parent subroutine then any aliases which are also received are ignored. An assignment to the actual option has priority, after which the FIRST alias assigned to the option which is listed in the option hash received by the parent subroutine. (In other words, once an option receives a value, subsequent assignments through aliases are ignored.)

Returns

Nothing. But it modifies the contents pointed to by $rh_options.

Examples

from fun_cmp :

assign_option_aliases( \%opt,
'domain' => 'limits', # set the standard option 'limits' to the one specified as domain
'vars' => 'var', # set the standard option 'var' to the one specified as vars
'reltol' => 'relTol',
'param' => 'params',
);

set_default_options( \%opt,
'var' => $functVarDefault,
'params' => [],
'limits' => [[$functLLimitDefault, $functULimitDefault]],
'mode' => 'std',
'tolType' => (defined($opt{tol}) ) ? 'absolute' : 'relative',
'tol' => .01, # default mode should be relative, if the tol option is defined, the mode is absolute
'relTol' => $functRelPercentTolDefault,
'numPoints' => $functNumOfPoints,
'maxConstantOfIntegration' => $functMaxConstantOfIntegration,
'zeroLevel' => $functZeroLevelDefault,
'zeroLevelTol' => $functZeroLevelTolDefault,
'debug' => 0,
);

Notes

This subroutine must preceed set_default_options. (Otherwise all options will have SOME value, and this subroutine will have no affect.)

This subroutine is at the end of the macro file PGanswermacros.pl