MATLAB 检查可选参数是否存在:输入参数不足

问题描述 投票:0回答:1

我编写了一个 Matlab R2020b 函数,可以选择接收三个输入 - 但如果未接收到输入,则应将它们设置为脚本中的默认值。

function my_opt_func(opt1, opt2, opt3)
    if (~exist(opt1, 'var'))
        opt1 = setopt1();
    end
    if (~exist(opt2, 'var'))
        opt2 = setopt2();
    end
    if (~exist(opt3, 'var'))
        opt3 = setopt3();
    end

    disp(string(opt1) + string(opt2) + string(opt3))
    
    function opt1 = setopt1()
        opt1 = 1;
    end
    
    function opt2 = setopt2()
        opt2 = 2;
    end
    
    function opt3 = setopt3()
        opt3 = 3;
    end

end

这里,不同的

setopt
函数用于生成适当的默认值。

不幸的是,在不带参数的情况下调用此函数,如

my_opt_func
my_opt_func()
会给出错误
Not enough input arguments
。我尝试使用
varargin
的变体,但遇到了相同的错误。

当我在不使用

setopt
函数的情况下设置值时,我不会收到此错误 - 但由于我的实际程序的复杂性,我确实需要使用函数来开发我的默认值。

如何修复此错误,以便用户可以调用带有或不带有参数的函数 - 作为

my_opt_func()
my_opt_func(param1, param2, param3)

function matlab exists not-exists
1个回答
0
投票

Cris 回答了您的直接问题在评论中

exist
希望您输入变量的名称,而不是变量本身(因为它可能不存在!)

    if (~exist('opt1', 'var')) % <- char 'opt1' is the variable name
        opt1 = setopt1();
    end

但无论如何,还有更好的方法可以做到这一点:

  1. 使用
    nargin
    n数量argumentsinput)。由于这直接取决于输入参数的数量,因此您不能执行诸如意外定义输入验证上方的变量并破坏流程之类的操作。调用函数的语法是相同的。
function my_opt_func(opt1, opt2, opt3)
    if nargin < 1
        opt1 = setopt1();
    end
    if nargin < 2
        opt2 = setopt2();
    end
    if nargin < 3
        opt3 = setopt3();
    end

    ...
  1. 使用具有可选输入和默认值的输入解析器,特别是使用
    addOptional
    意味着您可以保持函数调用语法相同。或者,您可以使用输入解析器来处理“名称-值对”。我发现这通常是多余的,除非您想利用 inputParser 提供的其他功能。
    
    
  2. function my_opt_func(varargin) p = inputParser; p.addOptional( 'opt1', setopt1() ); p.addOptional( 'opt2', setopt2() ); p.addOptional( 'opt3', setopt3() ); p.parse( varargin{:} ); opt1 = p.Results.opt1; opt2 = p.Results.opt2; opt3 = p.Results.opt3; ...
	
© www.soinside.com 2019 - 2024. All rights reserved.