如何在Matlab中将可选的自变量传递给函数

时间:2019-01-08 06:56:01

标签: matlab function arguments parameter-passing

我试图了解MATLAB中位置参数的用法,我所指的是this页面。

假设我有一个如下定义的MATLAB函数:

function printPhoto(filename,varargin)
    p = inputParser;
    defaultFinish = 'glossy';
    validFinishes = {'glossy','matte', 'colorful'};
    checkFinish = @(x) any(validatestring(x,validFinishes));

    defaultColor = 'RGB';
    validColors = {'RGB','CMYK','colorful'};
    checkColor = @(x) any(validatestring(x,validColors));

    defaultWidth = 6;
    defaultHeight = 4;

    addRequired(p,'filename',@ischar);
    addOptional(p,'finish',defaultFinish,checkFinish);
    addOptional(p,'color',defaultColor,checkColor);
    addParameter(p,'width',defaultWidth,@isnumeric);
    addParameter(p,'height',defaultHeight,@isnumeric);
    parse(p,filename,varargin{:});
end

当我如下调用上述函数时:printphoto('myFile.img', 'colorful'),是否可以使第二个参数对应于函数定义中的第二个可选位置参数,即color='colorful'而不是{{1} }?

1 个答案:

答案 0 :(得分:1)

这是在混合可选位置参数和参数时所得到的。 恕我直言,您应该使用一个或另一个,但不能同时使用

将参数定义为位置参数时,是在告诉MATLAB该输入将始终出现在该特定位置,如果确实出现。如果您想按输入顺序进行操作,那正是参数类型自变量的用途。

考虑一下,以下语法没有什么不同:

printphoto('myFile.img','color','colorful')
printphoto('myFile.img', color='colorful' )

因此,我建议您坚持使用参数类型的参数,但是如果您坚持让它们位于位置,请确保如果用户希望“跳过”输入,请为输入分配默认值(通过提供一些约定的内容) “空”值,例如""[])。