12

Can I create an anonymous function that accepts a variable number of arguments?

I have a struct array S with a certain field, say, bar, and I want to pass all the bar values to my anonymous function foo. Since the number of elements in struct S is unknown, foo must be able to accept a variable number of arguments.

The closest thing that I've been able to come up with is passing a cell array as the input argument list:

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

and I'm invoking it with foo({S.bar}), but it looks very awkward.

Creating a special m-file just for that seems like an overkill. Any other ideas?

2 Answers 2

10

Using varargin as the argument of the anonymous function, you can pass a variable number of inputs.

For example:

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

Usage

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

you provided 4 arguments
Sign up to request clarification or add additional context in comments.

2 Comments

I didn't realize that varagin can be used in anonymous function, and the answer was right under my nose :) For that matter, you could've used nargin instead of length(varargin) :)
@EitanT: I realize I could have used nargin, but I wanted some simple manipulation that would employ varargin
0
  • va_arg in matlab called varargin here is the content of the link :

varargin is an input variable in a function definition statement that allows the function to accept any number of input arguments.

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.