argn
Возвращает количество входных/выходных аргументов в вызове функции
Синтаксис
[lhs, rhs] = argn() lhs = argn(1) rhs = argn(2)
Аргументы
- lhs
Количество ожидаемых выходных аргументов с левой стороны. Устанавливается в 1, когда выходных аргументов не ожидается.
- rhs
Количество входных аргументов с правой стороны, указываемых при вызове функции.
Описание
Эта функция используется внутри определения функции. Она даёт количество фактических входных
аргументов (rhs
) и выходных аргументов (lhs
),
переданных в функцию при её вызове. Она обычно используется в определениях функции для работы
с необязательными аргументами.
Проверка существования именного входного аргумента с помощью isdef(..,"l")
более надёжна, чем с помощью argn() . Пожалуйста, смотрите примеры. |
Примеры
Простые примеры:
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);
--> test(); 1. 0. --> test(4.321); 1. 1. --> test(3, -1); 1. 2. --> test(3, -1, a=0); Неверное число аргументов. --> test(3, -1, c=8); Неверное число аргументов. --> out1 = test(); 1. 0. --> [o1, o2] = test(%pi); 2. 1.
С использованием varargin и varargout:
function [res, varargout]=test(a, varargin) res = "abc"; varargout = list(%i); [lhs, rhs] = argn() disp([lhs rhs]) // <<<<<<<<<<< endfunction test(); test(4.321); test(3, -1); test(3, -1, a=0); test(3, -1, 8); out1 = test(); [o1, o2] = test(%pi); [o1, o2, o3] = test(%pi);
--> test(); 1. 0. --> test(4.321); 1. 1. --> test(3, -1); 1. 2. --> test(3, -1, a=0); 1. 3. --> test(3, -1, 8); 1. 3. --> out1 = test(); 1. 0. --> [o1, o2] = test(%pi); 2. 1. --> [o1, o2, o3] = test(%pi); 3. 1.
Надёжная проверка существования входных аргументов:
function res=test(a, b, varargin) res = "" if isdef("a","l") res = "a передана." end if isdef("b","l") res = res + " b передана." end if isdef("c","l") res = res + " c передана." 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)
--> test() ans = --> test(4.321) ans = a передана. --> test(4.321, %z) ans = a передана. b передана. --> test(b=3) ans = b передана. --> test(c=3) ans = c передана. --> test(-1, c=3) ans = a передана. c передана. --> test(-1, a=2, c=3) // входные аргументы в varargin являются/становятся всегда безымянными ans = a передана. --> test(b=-1, a=2, c=3) ans = a передана. b передана.
Другое использование:
function concat=myOwnFunction(name, optional) [lhs,rhs] = argn() if rhs <= 1 then optional="моё Необязательное значение" end if rhs == 0 then error("Ожидался по меньшей мере один аргумент") end concat = name+" "+optional endfunction
Смотрите также
Report an issue | ||
<< Библиотеки | Функции | deff >> |