我正在設計一個函數,它需要作爲參數一個結構和任意數量的標誌。該函數將包含幾個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