Switching functions smartly, like hash map

3 views (last 30 days)
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!

Accepted Answer

Mike
Mike on 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);

More Answers (1)

Andrei Bobrov
Andrei Bobrov on 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);
  1 Comment
Zoe Zhang
Zoe Zhang on 24 Aug 2011
Thanks a lot, though switch may not work for me this time since my conditions are a little complicated. But great suggestions!

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!