Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Функции > argn

argn

Возвращает количество входных/выходных аргументов в вызове функции

Синтаксис

[lhs, rhs] = argn()
lhs = argn(1)
rhs = argn(2)

Аргументы

lhs

Количество ожидаемых выходных аргументов с левой стороны. Устанавливается в 1, когда выходных аргументов не ожидается.

rhs

Количество входных аргументов с правой стороны, указываемых при вызове функции.

Описание

Эта функция используется внутри определения функции. Она даёт количество фактических входных аргументов (rhs) и выходных аргументов (lhs), переданных в функцию при её вызове. Она обычно используется в определениях функции для работы с необязательными аргументами.

Нет способа обнаружить вызвана ли Scilab-функция без ожидаемых выходных аргументов. В этом случае lhs возвращает 1.
Проверка существования именного входного аргумента с помощью 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

Смотрите также

  • isdef — проверяет существование переменной
  • varargin — переменное число аргументов в списке входных аргументов
  • varargout — переменное число аргументов в списке выходных аргументов
  • macrovar — переменные в функции
  • function — открывает определение функции
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Mon Feb 12 20:08:51 CET 2018