在Matlab的单元格模式下,有没有一种方法可以调用子函数?

9

假设我有以下代码:

% Cellmode_subfunction_test.m
%% Cell 1
foo(1);

%% Cell 2
foo(2);

%% Definition of the foo subfunction
function foo(num)
disp(['num=' num2str(num)]);

如何使用在结尾定义的子功能来测试单元格1和单元格2?
编辑:基本上,此示例中的每个单元格都执行一些漫长的计算,因此我希望分别测试和调试它们。我使用子函数来抽象出和重用常见功能,并且由于到目前为止仅在此特定应用程序中使用此功能,因此我不想将foo放在单独的m文件中。
编辑(2):我刚刚想起来,我隐约记得单元格模式仅适用于matlab脚本而不是函数m文件,并且不允许在这些脚本中使用子函数和嵌套函数。因此,我要求的可能是不可能的。
虽然下面给出的匿名函数解决方案可能有些受限制,因为它仅允许单个表达式函数,但实际上它已足够满足我的需求,因此我已将其接受为解决我的问题的解决方案。

抱歉我帮不上更多的忙。只是为了更清楚,你想要将子函数添加到一个m文件中,这些函数仅由该m文件使用,并且您不想创建一个全新的m文件? - gnovice
你的第二次编辑澄清了事情。确实,在脚本文件中,您不能拥有子函数或嵌套函数。匿名函数是脚本的唯一选择。唯一的其他选项是将foo保存为单独的文件。 - gnovice
2个回答

5

更正:

我误解了你对单元格一词的使用。抱歉。看起来你只是想在命令行定义一个函数,而不将其保存到 .m 文件中。为此,你可以使用匿名函数:

foo = @(num) disp(['num=' num2str(num)]);

然后你可以像使用其他函数一样使用“foo”。

1
如果您查看提供的代码,就不是这种情况。这是关于能够将MATLAB代码放置在单独的“单元格”中以便于开发的能力。 - Hannes Ovrén
提供的代码在这一点上有些不清楚。您不能将MATLAB代码放置在单元格数组的单独单元格中。您可以将函数句柄放置在单元格数组中,例如:fhArray = {@foo1, @foo2}。 - gnovice
很遗憾,这不是我想要做的事情,但还是谢谢你的帮助。 - snth
我已经修正了我的答案,以解决我对你所问问题的误解。很抱歉造成混淆。 - gnovice
谢谢。虽然这不是我希望得到的答案,但它确实完成了工作,而我想要的可能实际上是不可能的。 - snth

0
我通常处理这个问题的方式是在主函数内部使用dbstop。然后,您就可以访问主函数通常可以访问的所有函数。如果您正在使用ML编辑器,请在第一次调用foo时使用断点。
希望能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接