什么方法可以简化以下逻辑操作?

时间:2016-08-26 03:26:26

标签: matlab

我正在做类似于以下逻辑操作的事情:

例如,(x,y), x and y的测试仅取值0或1,因此有4种不同的选择:(0,0), (0,1), (1,0) and (1,1)。我希望如果(0,0)发生,则程序执行function00; (0,1) for function01; (1,0) for function10(1,1) for function11

当然,我可以使用if then else来编写它,但我想这样做有点长。

if x==0 && y==0
  'run function00'
  else if x==0 && y==1
    'run function01'
    else if x==1 && y==0
      'run function10'
      else if x==1 && y==1
       'run function11'
      end
    end
  end
end

这里的要点是使用它 - 然后 - 否则使代码不可读。我尝试使用switch使其在某种意义上更具可读性:

switch (x,y)
   case (0,0)
     'run function00'
   case (0,1)
     'run function01' 
   case (1,0)
     'run function10'
   case (1,1)
     'run function11'
end

但是,当我使用switch时,问题是当我将案例设置为(0,0), (0,1), (1,0) and (1,1)时会出现语法错误。我想知道如何解决它,或者我不知道的其他操作可以做同样的事情。有人可以给出一些建议吗?在这里,假设我已经定义了function00.mfunction01.mfunction10.mfunction11.m

2 个答案:

答案 0 :(得分:3)

我建议避免使用eval并使用函数句柄。定义函数句柄的单元格数组

>> fh = cell(2,2); 
>> fh{1,1} = @function00; fh{1,2} = @function01; % And so on for all four elements
>> out = fh{x+1,y+1}(); % Where x y are your binary variables

答案 1 :(得分:0)

您可以动态构造字符串" function" + x + y,并使用eval将该字符串作为函数执行。这可能是您案例中最简单的解决方案。

eval(sprintf('run function%d%d',x,y))