我正在设计一个函数,它需要作为参数一个结构和任意数量的标志。该函数将包含几个if
,用于检查是否设置了特定标志。将标志传递给Matlab函数的最新方法是什么?
什么是最好的方法来实现这一目标?我正在考虑将标志作为单独的字符串参数传递。有没有更好的解决方案?
我正在设计一个函数,它需要作为参数一个结构和任意数量的标志。该函数将包含几个if
,用于检查是否设置了特定标志。将标志传递给Matlab函数的最新方法是什么?
什么是最好的方法来实现这一目标?我正在考虑将标志作为单独的字符串参数传递。有没有更好的解决方案?
我会做它喜欢用varargin
和ismember
:
function foo(arg1,arg2,varargin)
flag1=ismember('flag1',varargin);
flag2=ismember('flag2',varargin);
flag3=ismember('flag3',varargin);
你可以叫这样的功能:
foo(a1,a2,'flag3','flag1')
这将激活flag1
和flag3
。
也许你可以通过varargin - 标志的甚至会是名称和奇它们的值(除第一)
函数foo(ST,varargin)
末
然后通过像这样的值:
美孚(ST,“佛罗里达州G1' ,真正的 '标志2',虚假)
美孚(ST, 'Flag3相同的',真正的 'MyFlag2',虚假, 'MySpecialFlag',虚假)
美孚(ST)
要访问可变参数使用
varargin {2},varargin {3},
等。
要检查一个特定的标志是否通过,d o
flagNames = varargin {2:end};
ismember( 'MyFlag',flagNames)
有没有简单的方法来检查是否通过了特定的标志? – Tim 2011-12-21 22:35:25
@TimN,我更新了我的答案。一探究竟。 – 2011-12-21 22:37:54
通行证在标志的struct
:
options = struct(...
'Flag1', true, ...
'Flag2', true, ...
'MySpecifFlag', false ...
);
Foo(st, options);
要获得被明确地由用户设置的所有标志的列表,使用fieldnames
:
passedOptions = fieldnames(options);
这将返回一个单元格数组,其元素是字符串 - 这些字符串是用户设置的标志;该阵列的第i
个元素是用户设置的i
th标志。
访问所设定的每一旗标值:
options.(passedOptions{i}) %# gets the value of the flag corresponding to passedOptions{i}
您可以将标志作为0和1的字符串传递。顺序可以是固定的,也可以传递标志名称的单元数组。
flagstr = '101'; %# string passed as argument
flaglog = flagstr=='1'; %# logical vector, can be accessed as flaglog(i)
fname = {'flag1','flag2','flag3'}; %# flag names, can be passed as argument or defined in the function
fvalue = num2cell(flaglog); %# create cell array
flags = cell2struct(fvalue, fname, 2); %# create a structure, so you can access a flag with flags.flag1
你需要照顾到匹配fvalue
和fnames
长度。如果他们不同,你可以产生一个错误或以某种方式纠正它(删除额外的标志或填补缺席默认值)。
varargin
是解析可变数量的任意输入参数的方法。如果你想对函数的调用语法(即可选/必需的参数)进行更多的控制,那么我建议看看Matlab的input parser。
正是我在找的! – Tim 2011-12-21 22:37:52