argn
Returns the actual number of input/output arguments in a function call
Syntax
[lhs, rhs] = argn() lhs = argn(1) rhs = argn(2)
Arguments
- lhs
Number of expected Left-Hand-Side output arguments assigned at the function call.
- rhs
Number of Right-Hand-Side input arguments provided in the function call.
Description
This function is used inside a function definition.
It gives the number of actual inputs arguments (rhs
) and output arguments (lhs
) passed to the function when the function is called. It is usually used in function definitions to deal with optional arguments.
Testing the existence of a named input argument with isdef(..,"l")
is more robust that with argn() . Please see examples. |
When the caller function has either no output argument or only varargout
, the (lhs
) is set to 0
. Otherwise, the number of expected arguments is set.
Examples
Simple examples:
function [res, res2]=test(a, b) [lhs, rhs] = argn() [res, res2] = ("abc", %pi); disp([lhs rhs]) // <<<<<<<<<<< endfunction test(); test(4.321); test(3, -1); test(3, -1, a=0); test(3, -1, c=8); out1 = test(); [o1, o2] = test(%pi);
With varargin and varargout:
function [varargout]=disp_argn(varargin) varargout = list("abc",%i); [lhs, rhs] = argn() disp([lhs rhs]) // <<<<<<<<<<< endfunction function [res, varargout]=disp_argn_with_args(a, varargin) res = "abc"; varargout = list(%i); [lhs, rhs] = argn() disp([lhs rhs]) // <<<<<<<<<<< endfunction // varargin disp_argn(1); disp_argn_with_args(1); disp_argn(1, 2); disp_argn_with_args(1, 2); disp_argn(1, 2, 3); disp_argn_with_args(1, 2, 3); // varargout out1 = disp_argn(); out1 = disp_argn_with_args(); [o1, o2] = disp_argn(); [o1, o2] = disp_argn_with_args(); [o1, o2, o3] = disp_argn(); [o1, o2, o3] = disp_argn_with_args();
Robust test of the existence of input arguments:
function res=test(a, b, varargin) res = "" if isdef("a","l") res = "a passed." end if isdef("b","l") res = res + " b passed." end if isdef("c","l") res = res + " c passed." end endfunction clc test() test(4.321) test(4.321, %z) test(b=3) test(c=3) test(-1, c=3) test(-1, a=2, c=3) test(b=-1, a=2, c=3)
Another usage:
function concat=myOwnFunction(name, optional) [lhs, rhs] = argn() if rhs <= 1 then optional="my Optional value"; end if rhs == 0 then error("Expect at least one argument"); end concat=name+" "+optional; endfunction
See also
History
Version | Description |
6.1.0 | The lhs argument is set to zero when the caller function has no output assignement. |
Report an issue | ||
<< Libraries | Advanced functions | deff >> |