calling the function dynamically - is it possible using eval or evalin
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Gopalakrishnan venkatesan
am 31 Aug. 2016
Bearbeitet: Stephen23
am 1 Sep. 2016
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
0 Kommentare
Akzeptierte Antwort
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:
0 Kommentare
Weitere Antworten (1)
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)
Siehe auch
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!