我想设置一个标志,用于确定debug-print语句是否实际打印到控制台:
s_verbose = 1;
global DBG
if s_verbose
DBG = @(varargin) fprintf(varargin);
else
DBG = @(varargin) 1; % need the 1 :|
end
然而这失败了:
>> DBG('42')
Error using fprintf
Invalid file identifier.
Use fopen to generate a valid file identifier.
>> fprintf('42')
42
有没有干净的方法来实现这个目标?
答案 0 :(得分:1)
我经常使用这样的实用函数:
function vfprintf(verbose, varargin)
% VFPRINTF Display output optionally depending on the level of verbosity.
%
% VFPRINTF(TF, ARGS) passes the arguments ARGS to the built-in MATLAB
% command |fprintf| if TF is logical true. If TF is logical false, VFPRINTF
% does nothing.
assert(islogical(verbose) && isscalar(verbose),...
'utils:InvalidVerbose',...
'VERBOSE must be logical true or false');
if verbose
fprintf(varargin{:});
end
然后,您可以拨打vfprintf
而不是fprintf
。将您的verbose
变量作为第一个参数,值为true
或false
,然后使用您通常提供给fprintf
的任何参数。如果verbose
为true
,则会显示,但如果verbose
为false
,则不会执行任何操作。
PS - 即使你这样做,我会尽量避免让verbose
成为全局变量。没有必要。