在MATLAB中调试时,我使用匿名函数进行诊断打印。如,
debug_disp = @(str) disp(str);
debug_disp('Something is up.')
...
debug_disp = @(str) disp([]);
% diagnostics are now hidden
使用disp([])
作为“狼吞虎咽”似乎对我来说有点脏;有更好的选择吗?显而易见的(?)方法不起作用:
debug_disp = @(str) ;
我认为这对其他功能语言应用程序非常有用,而不仅仅是诊断打印。
答案 0 :(得分:15)
您可以在代码库中添加常规的无操作功能。
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的呼叫者列表,在“个人资料报告”输出中获取所有已删除操作的列表。
你也可以使用Matlab的内置@deal,它在退化的情况下什么也不做,什么也不返回。
答案 1 :(得分:10)
我认为disp([])
或disp('')
完全可以接受。它没有返回任何东西,也没有副作用。
答案 2 :(得分:3)
答案 3 :(得分:3)
这是一个无所事事的匿名功能。它什么都不做,并返回一个空数组,你可以忽略它。你需要在它后加一个分号来抑制disp。
debug_disp = @(str) [];
disp([])也应该正常工作。无论你喜欢哪种风格。
答案 4 :(得分:2)
尝试debug_disp = @(str)(1);