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 withargn(). 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 lhsargument is set to zero when the caller function has no output assignement. | 
| Report an issue | ||
| << Libraries | Advanced functions | deff >> |