有没有办法在matlab的单元格模式下调用子函数?

Posted

技术标签:

【中文标题】有没有办法在matlab的单元格模式下调用子函数?【英文标题】:Is there a way to call a subfunction while in cell mode in matlab? 【发布时间】:2009-02-02 15:54:24 【问题描述】:

假设我有以下代码:

% 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 文件中。

Edit(2):我只记得我隐约记得单元模式仅在 matlab 脚本中工作,而不在函数 m 文件中工作,并且在此类脚本中不允许使用子函数和嵌套函数。因此,我所要求的可能是不可能的。

虽然下面给出的匿名函数解决方案可能有些限制,因为它只允许单个表达式函数,但它实际上已经足够我想做的事情了,因此我接受了它作为我的问题的解决方案。

【问题讨论】:

对不起,我帮不上忙。为了更清楚起见,您是否要向 m 文件添加子函数,这些子函数仅由该 m 文件使用,并且您不想为其创建一个全新的 m 文件? 您的第二次编辑澄清了一些事情。确实,在脚本文件中不能有子函数或嵌套函数。匿名函数是使用脚本的唯一方法。唯一的其他选择是将 foo 保存为单独的文件。 【参考方案1】:

更正:

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

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

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

【讨论】:

如果您查看提供的代码,情况并非如此。这是关于将 MATLAB 代码放置在单独的“单元”中以简化开发的能力。 提供的代码在这一点上有些不清楚。您不能将 MATLAB 代码放置在元胞数组的单独元胞中。您可以将函数句柄放在一个元胞数组中,例如:fhArray = @foo1, @foo2。 不幸的是,这不是我想要做的,但还是感谢您提供帮助。 我已经修正了我的答案,以解释我对您所问内容的误解。很抱歉混淆了。 谢谢。虽然这不是我希望的答案,但我希望这确实可以完成工作,而我想要的实际上可能是不可能的。【参考方案2】:

我通常处理的方式是在主函数内部的某处使用 dbstop。然后您可以访问主函数通常可以访问的所有功能。如果您正在使用 ML 编辑器,只需在第一次调用 foo 时使用断点。

希望对你有帮助。

【讨论】:

以上是关于有没有办法在matlab的单元格模式下调用子函数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 CListCtrl,如何使选择颜色整行?

多选模式下的 UITableView 删除选定单元格中所有子视图的背景颜色

从excel单元格调用excel工作表函数

有没有办法从 OpenOffice Calc 中的单元格中提取子字符串?

在MATLAB中的一行中从单元格数组中获取所有一个属性

如何将单元格而不是单元格的值传递给 LibreOffice 函数?