argn número de argumentos na chamada de uma função

## Seqüência de Chamamento

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

## Parâmetros

lhs

  Number of expected Left-Hand-Side output arguments. Is set to 1 when no output argument is expected.

rhs

  Number of Right-Hand-Side input arguments provided in the function call.

## Descrição

Esta função é usada dentro da definição de uma função. Ela fornece os números de parâmetros de entrada `rhs` e saída `lhs` passados à função quando esta é chamada. Geralmente é usada em definições de funções para lidar com parâmetros opcionais.

Testing the existence of a named input argument with `isdef(..,"l")` is more robust that with `argn()`. Please see examples.

## Exemplos

Exemplos simples :

    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);
    Wrong number of input arguments.

    --> test(3, -1, c=8);
    Wrong number of input arguments.

    --> out1 = test();
       1.   0.

    --> [o1, o2] = test(%pi);
       2.   1.

Com varargin e 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.

Teste robusto da existência de argumentos de entrada:

    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)

    --> test()
     ans  =

    --> test(4.321)
     ans  =
     a passed.

    --> test(4.321, %z)
     ans  =
     a passed. b passed.

    --> test(b=3)
     ans  =
      b passed.

    --> test(c=3)
     ans  =
      c passed.

    --> test(-1, c=3)
     ans  =
     a passed. c passed.

    --> test(-1, a=2, c=3) // argins in varargin are/become always anonymous
     ans  =
     a passed.

    --> test(b=-1, a=2, c=3)
     ans  =
     a passed. b passed.

Outro uso:

    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

## Ver Também

- isdef
- varargin
- varargout
- macrovar
- function