在函数中,我有一些disp()实例来帮助跟踪长计算过程的进度.
例如,
function myfun(inputs)
...
disp('Step i finished')
...
end
Run Code Online (Sandbox Code Playgroud)
在其他一些用法中myfun,没有disp()消息更方便.有没有办法在命令行中禁止消息'Step i finished'而不添加新代码或使用该eval()函数?
注意:eval()众所周知,对于任何严肃的计算都太慢了.
stdout在MATLAB中没有重定向" "的机制.你可以捕获它evalc然后忽略它,但它也捕获(并因此抑制)所有警告.此外,所有通常的反对使用eval申请.
如果你坚持那么你可以使用这个糟糕的坏 BAD黑客:
disp = @(~) display([]); %# at the start of the function
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的不想改变你的功能中的单个字母,请把
function disp(~)
Run Code Online (Sandbox Code Playgroud)
在MATLAB路径上的单独M文件中,并在完成后从MATLAB路径中删除其路径(或删除/重命名文件).
但实际上,最好的方法是重写您的功能,以便显示是可选的,和/或显示级别可调.例如,就像几乎所有MATLAB自己的函数一样:
options = optimset('Display', 'iter-detailed');
[~] = fminsearch(@cos, 3, options);
spparms('spumoni', 2);
sparse(rand(4)) \ rand(4,1)
Run Code Online (Sandbox Code Playgroud)