Анонимная функция с списком аргументов переменной длины

Можно ли создать анонимную функцию, которая принимает переменное количество аргументов?

У меня есть массив struct S с определенным полем, скажем, bar, и я хочу передать все значения bar моей анонимной функции foo. Поскольку число элементов в struct S неизвестно, foo должно иметь возможность принимать переменное количество аргументов.

Самое близкое, что я смог придумать, - передать массив ячеек в список входных аргументов:

foo({arg1, arg2, arg3, ...})

и я вызываю его с помощью foo({S.bar}), но это выглядит очень неудобно.

Создание специального m файла только для этого кажется излишним. Любые другие идеи?

Ответ 1

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

Например:

foo = @(varargin)fprintf('you provided %i arguments\n',length(varargin))

Использование

s(1:4) = struct('bar',1);
foo(s.bar)

you provided 4 arguments

Ответ 2

  • va_arg в matlab, называемый varargin, здесь содержится ссылка на ссылку

varargin - это входная переменная в выражении определения функции, позволяет функции принимать любое количество входных аргументов.

function varlist(varargin)
   fprintf('Number of arguments: %d\n',nargin);
   celldisp(varargin)

varlist(ones(3),'some text',pi)


Number of arguments: 3

varargin{1} =
     1     1     1
     1     1     1
     1     1     1

varargin{2} =
some text

varargin{3} =
    3.1416