MATLAB Answers

Help to avoid the eval() function

9 views (last 30 days)
Yunhui Zhou
Yunhui Zhou on 5 Nov 2016
Edited: John D'Errico on 5 Nov 2016
I currently have problem using the feval() function to replace the eval() function.
The user will input a string array "function_name", which is the name of the function_name.m file; and a cell array "varargin", in which each cell is an input argument for the function_name.m file. The number of cells in "varargin" can't be determined.
Currently I'm using a for-loop to generate a string "function_name(varargin{1},varargin{2},...)", and then using the eval() function to execute the string, and it works. However, I wish to replace the eval() function with feval() function, but it seems hard to transfer all the input arguments. Is it possible to do the replacement?

  0 Comments

Sign in to comment.

Answers (3)

KSSV
KSSV on 5 Nov 2016

  0 Comments

Sign in to comment.


Guillaume
Guillaume on 5 Nov 2016
feval(function_name, varargin{:})
Will call the function with however many arguments are stored in varargin.

  0 Comments

Sign in to comment.


John D'Errico
John D'Errico on 5 Nov 2016
Edited: John D'Errico on 5 Nov 2016
Easy, peasy:
y = feval(fun,varargin{:});
The {:} makes a cell array (i.e., varargin) into what is called a comma separated list,exactly what feval needs. This is how you expand a cell array into an argument list.

  0 Comments

Sign in to comment.

Sign in to answer this question.

Tags

Products