Анонимная функция с списком аргументов переменной длины
Можно ли создать анонимную функцию, которая принимает переменное количество аргументов?
У меня есть массив 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