Switching functions smartly, like hash map
3 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
In stead of using multiple if-else or switch-case, is there a way of switching functions smartly?
Take if as an example:
for i = 1 : n
if a
out(i) = function1(p1,p2,p3);
else
if b
out(i) = function2(p1,p2,p3);
else
if c
out(i) = function3(p1,p2,p3);
else
out(i) = function4(p1,p2,p3);
end
end
end
end
Maybe something like funMap = containers.map(key,{function1,...function4}??? So the code will look like:
for i = 1:n
key = ...;
out(i) = funMap(key);
end
Any thoughts? Thanks in advance!
0 Kommentare
Akzeptierte Antwort
Mike
am 24 Aug. 2011
yes, you can use function handles, and str2fun. Here is a simple example:
function out = foo(funOb,p1,p2,p3)
out = funOb(p1,p2,p3);
where funOb would be a function handle. You could also input a string:
function out = foo(funStr,p1,p2,p3)
funObj = str2func(funStr);
out = funOb(p1,p2,p3);
Weitere Antworten (1)
Andrei Bobrov
am 24 Aug. 2011
switch p
case a, fu = @function1;
case b, fu = @function2;
case c, fu = @function3;
otherwise fu = @function4;
end
out = fu(p1,p2,p3);
More
k = [a b c];
fu = {@function1 @function2 @function3 @function4};
t = k == p;
out = feval( fu{[t ~any(t)]},p1,p2,p3);
Siehe auch
Kategorien
Mehr zu Startup and Shutdown finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!