matlab - nargin vs 存在

标签 matlab

给定一个函数:

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/

相关文章:

matlab - 删除Matlab中两个特定数据点之间的线

带空格的字符串连接

matlab - 子图的中心图在 Matlab 中奇怪地缩放

matlab - 将 x 和 y 向量转换为网格

python - 使用来自 Octave 音程的数据在python中进行二次编程

c - 在C程序中使用动态库dll

matlab - 隐藏 MATLAB 条形图中的 Y 轴

MATLAB - 给定索引矩阵置换矩阵的列

MATLAB - 像素化绘图并将其制作成热图

python - Python 中的 Plot3d