gpt4 book ai didi

matlab - 在 matlab 函数中控制冗长的想法/最佳实践

转载 作者:太空宇宙 更新时间:2023-11-03 19:35:30 26 4
gpt4 key购买 nike

假设我有 some_fun 可以完成一些复杂的工作。

function foo = some_complicated_fun(x,y,z,verbosity)

我已经在这段代码中编写了很多调试打印,但如果它能正常工作,普通用户可能不会有兴趣看到所有这些。无论如何都会打印错误语句(参数不足等)。

我目前写函数的方法是:

function foo = some_complicated_fun(x,y,z,verbosity)

(x,y,z,verbosity) = parse_args(x,y,z,verbosity); % parse args, check nargin, etc

for i=1:5,

% whatever
% do some work with x,y,z
% blah blah

if verbosity
fprintf('Now on iteration %i\n',i); % basic print
end

% or, with mutiple levels:
if verbosity == 1;
fprintf('Now on iteration %i\n',i); % basic print
end
if verbosity == 2;
fprintf('x = %f,y = %f,z=%f %i\n',x,y,z); % more information
end

% do more work

end

我不喜欢用 if 语句来做,因为它会使代码困惑,但我想不出任何其他方法。一个类轮是好是坏:

if verbosity; fprintf('Iteration %i\n',i); end

更好是因为它更小,更糟是因为单行代码比 3 行代码的可读性差。

我想要的是一些简单、更优雅的方式来控制冗长。

存在吗?

最佳答案

这就是我最终所做的。

我写了一个函数(我叫它vprintf,但还有更好的名字。)

我不确定我是否想做全局变量,但这是一个想法。

function vprintf(v,l,varargin)
% VPRINTF(verbosity, verbosity_level_of_statement,sprintf_style_arguments
%
%
% example:
%
% verbosity = 1;
% vprintf(verbosity,1,'This will print if verbosity is at least 1\n Verbosity = %i\n',verbosity);

if nargin<3
error('not enough arguments');
end
if v>=l % if verbosity level is >= level of this statment
% keyboard;
fprintf(varargin{:});
end

关于matlab - 在 matlab 函数中控制冗长的想法/最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17974217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com