3

可能重复:
Matlab 中的默认参数

我有一个要传递大约 7 个参数的函数。其中 3 个是强制性参数,其余 4 个是可选参数。我只想传递前 3 个和最后一个参数。我该怎么做呢?

假设函数是:function[...] = fun(a, b, c, d, e, f, g)

a, b, c - 所需的输入。

d、e、f、g - 可选输入。

我想调用 fun 并传递 a、b、c 和 g 的值。

在 R 中,我可以用一种非常简洁的方式指定它,例如:fun(a=1, b=4, c=5, g=0);

matlab中的等效语法是什么?

4

2 回答 2

5

不幸的是,没有办法做到这一点。您必须为不想传递的参数显式传递空值,并且需要在函数中检查该条件以查看参数是否已传递,以及参数是否为空。像这样的东西:

function fun(a, b, c, d, e, f, g)
    if nargin<3
        error('too few parameters');
    end
    if nargin<4 || isempty(d)
        d = default_value;
    end
    % and so on...
end

% call
fun(a, b, c, [], [], g);

最后,将可选参数收集到一个结构中并检查其字段可能会更容易:

function fun(a, b, c, opt)
    if nargin<3
        error('too few parameters');
    end
    if nargin>3
        if ~isfield(opt, 'd')
            opt.d = default_value;
        end
    end
end

% call
opt.g = g;
fun(a, b, c, opt);

调用函数更容易,您不必指定空参数。

于 2012-12-05T09:21:41.353 回答
3

在 MATLAB 中执行此操作的惯用方法是将参数值对用于可选参数,或使用指定了可选字段的结构。一种方法是使用inputparser帮助器类。

于 2012-12-05T11:35:32.047 回答