我正在做类似于以下逻辑操作的事情:
例如,(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.m
,function01.m
,function10.m
和function11.m
。
答案 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))