Ber*_* U. 5 matlab variadic-functions argument-passing
很多MATLAB函数都有一个输入结构,例如:
output = function MyFun(a,b,c,'-setting1',s1,'-setting2',s2,'-setting3',s3)
Run Code Online (Sandbox Code Playgroud)
我想知道如何在我自己的函数中实现这种功能.确切地说,我想知道如何创建一个函数,使得:
该函数具有可变数量的输入 N + M
第一个N
输入是有序的和未标记的.在上面的例子中,N = 3
.第一个输入始终是a
,第二个输入始终b
是第三个输入c
.该函数的输入是用户变量不一定需要发送b
,c
; 当他们不这样做时,这些可以采用默认(硬编码)值.据我所知,这种类型的功能通常是通过处理varargin.
其余M
输入是无序的,但标记为.在上面的例子中,M = 3
中,变量是S1,S2,S3和他们的标签setting1
,setting2
并setting3
分别,我想为用户能够指定这些变量中的任何命令他们想要的.如果用户选择不指定其中一个输入(即setting1
),那么我希望我的函数为其分配默认值s1.
这种功能的一个例子是dlmwrite功能.
理想情况下,我正在寻找一种MATLAB开发人员通常使用的方法,以便我的代码易于理解.
该InputParser
课程解决了所有这些问题.您可以指定任意数量的:
MathWorks提供了一个非常清晰的示例教程.对于定义为的函数function printPhoto(filename,varargin)
,该示例归结为以下内容.
创建inputParser
:
p = inputParser;
Run Code Online (Sandbox Code Playgroud)
指定默认值并定义验证标准:
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;
Run Code Online (Sandbox Code Playgroud)
定义必需/可选/参数输入名称,设置其默认值和验证功能:
addRequired(p,'filename',@ischar);
addOptional(p,'finish',defaultFinish,checkFinish);
addOptional(p,'color',defaultColor,checkColor);
addParameter(p,'width',defaultWidth,@isnumeric);
addParameter(p,'height',defaultHeight,@isnumeric);
Run Code Online (Sandbox Code Playgroud)
将输入解析为结构:
parse(p,filename,varargin{:});
Run Code Online (Sandbox Code Playgroud)
然后你有输入参数及其值p.Results
.
该InputParser
班在整个新MathWorks公司的功能使用,所以不要害怕自己用吧!