Matlab-匿名函数中的for循环

| 我对Matlab还是很陌生,但是我知道如何同时执行循环和匿名函数。现在,我想将这些结合起来。 我想写:
sa = @(c) for i = 1:numel(biscs{c}), figure(i), imshow(biscs{c}{i}.Image), end;
但这是无效的,因为matlab似乎只希望将换行符用作命令分隔符。我的代码写得很清楚(没有函数头):
for i = 1:numel(biscs{c})
    figure(i)
    imshow(biscs{c}{i}.Image)
end
我正在寻找一种解决方案,可以像我的第一个示例那样在一行中用匿名函数编写它。如果我可以用其他方式创建该函数,我也很高兴,只要我不需要新的函数m文件即可。     
已邀请:
匿名函数可以包含多个语句,但不能包含显式循环或if-子句。多个语句在单元格数组中传递,并一个接一个地求值。例如,此函数将打开一个图形并绘制一些数据:
fun = @(i,c){figure(i),imshow(imshow(biscs{c}{i}.Image)}
但是,这不能解决循环问题。幸运的是,这里有ARRAYFUN。这样,您可以如下编写循环:
sa = @(c)arrayfun(@(i){figure(i),imshow(biscs{c}{i}.Image)},...
         1:numel(biscs{c}),\'uniformOutput\',false)
方便地,此函数还返回
figure
imshow
的输出,即相应的句柄。     
如果要从另一个函数调用此函数,则可以在主函数的.m文件末尾定义它,然后使用@name语法对其进行引用。但是,这不适用于脚本文件,因为它们不能包含子函数。 第二种方法虽然有点脏,但是仍然可以使用,并且使用eval STRING:
fun = @(a,b) eval(\'for i = 1:a; imshow(b(i)); end\');
如果脚本文件可以某种方式允许定义子函数,那将是很好的选择,但这是不可能的。     

要回复问题请先登录注册