许多MATLAB函数都有一个输入结构,例如:
output = function MyFun(a,b,c,'-setting1',s1,'-setting2',s2,'-setting3',s3)
我想知道如何在自己的功能中实现这种功能。确切地说,我想知道如何创建一个函数:
该函数具有可变数量的输入N + M
第一个N
输入是有序且未标记。在上面的示例中,N = 3
。第一个输入始终为a
,第二个输入始终为b
,第三个输入始终为c
。函数输入是可变的,因为用户不一定需要发送b
,c
;当他们不这样做时,这些可以采用默认(硬编码)值。据我所知,此类功能通常通过varargin.
剩余的M
输入无序,但标记为。在上面的示例M = 3
中,变量是s1,s2,s3,它们的标签分别是setting1
,setting2
和setting3
,我希望用户能够以他们想要的顺序指定这些变量。如果用户选择不指定其中一个输入(即setting1
),那么我希望我的函数为s1.
分配默认值
这种功能的一个例子是dlmwrite功能。
理想情况下,我正在寻找一种MATLAB开发人员通常使用的方法,以便我的代码易于理解。
答案 0 :(得分:7)
InputParser
类解决了所有这些问题。您可以指定任意数量的:
MathWorks提供了一个非常清晰的tutorial with examples。对于定义为function printPhoto(filename,varargin)
的函数,该示例归结为以下内容。
创建inputParser
:
p = inputParser;
指定默认值并定义验证标准:
defaultFinish = 'glossy';
validFinishes = {'glossy','matte'};
checkFinish = @(x) any(validatestring(x,validFinishes));
defaultColor = 'RGB';
validColors = {'RGB','CMYK'};
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{:});
然后您在p.Results
中有输入参数及其值。
InputParser
类在新的MathWorks函数中使用,所以不要害怕自己使用它!