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 >> |
