calling the function dynamically - is it possible using eval or evalin

13 Ansichten (letzte 30 Tage)
function data(k)
k = {sum,multiply,divide};
for l=1:numel(k)
[a,b,c] = data_sum(d,e)
end
end
The function data calls the another function called data_sum. Now i need to change the function name on every loop i.e data_multiply, data_divide. These functions also has the same number of input and output arguments as data_sum.
Is it possible to solve the above problem using eval, evalin or some other way ?
Thanks a lot

Akzeptierte Antwort

Stephen23
Stephen23 am 31 Aug. 2016
Bearbeitet: Stephen23 am 1 Sep. 2016
The best solution would be to learn how to use function handles, and then simply create the cell array to have function handles instead of strings:
>> C = {@mtimes,@rdivide,@max};
>> for k = 1:numel(C), C{k}(2,3), end
ans =
6
ans =
0.6667
ans =
3
Generate function handles from strings If the function names really must be generated from strings, then use str2func to generate the function handles first, then call it as above:
>> S = {'mtimes','rdivide','max'};
>> C = cellfun(@str2func,S,'UniformOutput',false);
Avoid eval and evalin and assignin
Learn to avoid using eval and other functions that let beginners write slow buggy code:

Weitere Antworten (1)

Thorsten
Thorsten am 31 Aug. 2016
If you just have three functions, it's best to use
[a,b,c] = data_sum(d,e)
[a,b,c] = data_multiply(d,e)
[a,b,c] = data_divide(d,e)

Kategorien

Mehr zu Code Execution finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by