【问题标题】:How to pass Optional-Positional arguments to a function in matlab如何将可选位置参数传递给matlab中的函数
【发布时间】:2019-01-08 06:56:01
【问题描述】:

我试图了解 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' 而不是finish='colorful'

【问题讨论】:

    标签: matlab function arguments parameter-passing


    【解决方案1】:

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

    当您将参数定义为位置参数时,您是在告诉 MATLAB 该输入将始终出现在该特定位置,如果确实出现。如果您想调整输入的顺序,这正是参数类型参数的用途。

    想想看,下面的语法并没有什么不同:

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

    所以我建议坚持使用参数类型的参数,但是如果你坚持让它们定位,如果用户想要“跳过”它,请确保你为输入分配一个默认值(通过提供一些商定的"null" 值,例如 ""[])。

    【讨论】:

    • 很多功能两者兼得,而且通常很方便,但底线是正确的,调用 printphoto('myFile.img',[], 'colorful')
    • @Yuval 我同意它很有用。我的意思是,一旦你决定了一个 API(无论是位置的、有参数的还是混合的)你应该坚持使用它,而不是期望它突然以不同的方式工作。看来 OP 想要强制位置参数表现得像参数 - 这表明设计不好(因为如果这是一个预期的用例,他们首先没有理由定位)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2011-12-28
    • 1970-01-01
    • 2019-03-17
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多