给定一个函数:
function foo(myParam)
if nargin<1
myParam = 'default value';
end % if
end % function
我见过有人用类似下面的东西代替 nargin 版本
if ~exist('myParam', 'var')
myParam = 'default value';
end %if
我想知道这两种方式是否有任何偏好?
对我来说,“~exist...”版本的优点是,如果我更改函数参数的顺序,它应该仍然有效。然而,我对这种方法的担忧是,在嵌套函数的情况下,我可能会无意中获取全局定义或在周围函数范围内定义的变量。
对这个问题有什么想法吗?
最佳答案
两者都应该有效。但是……
Exist 往往很慢,因为它必须在您的工作区中查找相关变量。当您编写这样的错误检查时,您不希望它们耗尽 CPU 周期。针对 nargin 的测试是针对单个数值的简单测试。
我通常还建议进行更广泛的测试。有点像
if (nargin<1) || isempty(myparam)
myparam = defaultvalue;
elseif
...
end
在 elseif 分支中,我将进行一组额外的测试,以查看参数是否具有预期的大小、形状、变量类等。如果这些测试失败,我将返回一条友好的错误消息,解释怎么了。
关于matlab - nargin vs 存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/733646/