16

在 MATLAB 中调试时,我使用匿名函数进行诊断打印。例如,

debug_disp = @(str) disp(str);
debug_disp('Something is up.')
...
debug_disp = @(str) disp([]);
% diagnostics are now hidden

用作“狼吞虎咽disp([])”对我来说似乎有点脏;有更好的选择吗?明显的 (?) 方法不起作用:

debug_disp = @(str) ;

我认为这可能对其他函数式语言应用程序有用,而不仅仅是诊断打印。

4

5 回答 5

18

你可以在你的代码库中添加一个常规的无操作函数。

function NOP(varargin)
%NOP Do nothing
%
% NOP( ... )
%
% A do-nothing function for use as a placeholder when working with callbacks
% or function handles.

% Intentionally does nothing

然后,您可以使用函数句柄而不是匿名函数,无论您想要什么都不做。

debug_disp = @NOP;

现在它有点自我记录,明确表明您打算什么都不做,而不是为 disp() 抓取错误的输入。这在源代码中很明显,此外,当您在调试器中检查保存函数句柄的变量时,它会显示为“@NOP”,这可能比匿名句柄更具可读性。通过查看 NOP 的调用者列表,您可以在“配置文件报告”输出中获得所有 nopped-out 操作的列表。

您还可以使用 Matlab 的内置 @deal,在退化的情况下它什么也不做,也不返回任何内容。

于 2011-06-14T18:24:14.970 回答
11

我认为disp([])还是disp('')完全可以接受的。它不会返回任何东西,也没有副作用。

于 2009-12-15T14:14:57.463 回答
4

这是一个无所事事的匿名函数。它什么都不做,并返回一个空数组,您可以忽略它。您需要通过在 disp 后面加上分号来抑制它。

debug_disp = @(str) [];

disp([]) 也应该可以正常工作。无论您喜欢哪种风格。

于 2009-12-15T14:47:49.280 回答
3

如果您只是在寻找一个“无所事事”命令来替换匿名函数的主体,我可能会选择DRAWNOW

debug_disp = @(str) drawnow;

这将简单地刷新事件队列并更新图形而不是显示任何文本。

于 2009-12-15T03:32:46.280 回答
2

尝试debug_disp = @(str)(1);

于 2009-12-15T17:45:13.153 回答