2011-12-21 41 views
3

我正在設計一個函數,它需要作爲參數一個結構和任意數量的標誌。該函數將包含幾個if,用於檢查是否設置了特定標誌。將標誌傳遞給Matlab函數的最新方法是什麼?

什麼是最好的方法來實現這一目標?我正在考慮將標誌作爲單獨的字符串參數傳遞。有沒有更好的解決方案?

回答

3

我會做它喜歡用vararginismember

function foo(arg1,arg2,varargin) 

    flag1=ismember('flag1',varargin); 
    flag2=ismember('flag2',varargin); 
    flag3=ismember('flag3',varargin); 

你可以叫這樣的功能:

foo(a1,a2,'flag3','flag1') 

這將激活flag1flag3

+0

正是我在找的! – Tim 2011-12-21 22:37:52

2

也許你可以通過varargin - 標誌的甚至會是名稱和奇它們的值(除第一)

函數foo(ST,varargin)

然後通過像這樣的值:

美孚(ST,「佛羅里達州G1' ,真正的 '標誌2',虛假)
美孚(ST, 'Flag3相同的',真正的 'MyFlag2',虛假, 'MySpecialFlag',虛假)
美孚(ST)

要訪問可變參數使用

varargin {2},varargin {3},

等。

要檢查一個特定的標誌是否通過,d o

flagNames = varargin {2:en​​d};
ismember( 'MyFlag',flagNames)

+0

有沒有簡單的方法來檢查是否通過了特定的標誌? – Tim 2011-12-21 22:35:25

+0

@TimN,我更新了我的答案。一探究竟。 – 2011-12-21 22:37:54

2

通行證在標誌的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} 
1

您可以將標誌作爲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 

你需要照顧到匹配fvaluefnames長度。如果他們不同,你可以產生一個錯誤或以某種方式糾正它(刪除額外的標誌或填補缺席默認值)。

0

varargin是解析可變數量的任意輸入參數的方法。如果你想對函數的調用語法(即可選/必需的參數)進行更多的控制,那麼我建議看看Matlab的input parser

相關問題