2010-01-11 40 views
5

我想爲所有傳遞給MATLAB函數的輸入參數編寫一個通用記錄函數。是否可以輕鬆地將所有輸入參數傳遞給另一個函數,而無需單獨命名參數?在日誌功能中,我當然可以在for循環中使用inputname(i)來獲取參數名稱。我寧願不必在主函數中執行這個邏輯。那麼,有沒有辦法像LogParams(allInputParams)這樣做?在MATLAB中記錄函數參數

回答

8

這聽起來像你有一個主要功能,並從該功能,你想調用函數LogParams獲得傳遞給主函數的變量的名稱列表。這裏是你可以實現你的功能LogParams一個辦法:

function names = LogParams 
    names = evalin('caller','arrayfun(@inputname,1:nargin,''UniformOutput'',0)'); 
end 

輸出從LogParams返回將包含傳遞給調用LogParams函數的變量名的單元陣列。上述解決方案使用以下功能:

  • EVALIN:在調用函數的工作區中計算表達式。
  • ARRAYFUN:作爲for循環的替代方法。
  • NARGIN:獲取傳遞給函數的參數個數。
  • INPUTNAME:獲取輸入變量的名稱。

作爲LogParams如何工作,創建下面的函數調用它的圖示:

function main_function(a,b,varargin) 
    disp(LogParams); 
end 

和現在與多個輸入端(假定變量xy調用它,並且z被定義在工作區):

>> main_function(x,y) 
    'x' 'y' 

>> main_function(x,y,z) 
    'x' 'y' 'z' 

>> main_function(x,y,z,z,z,z) 
    'x' 'y' 'z' 'z' 'z' 'z' 
+0

非常整齊! ..........(點到墊15個字符) – 2010-01-12 06:44:38

+0

謝謝。這有幫助。 – 2010-01-12 14:58:54

+0

+1對呼叫功能的影響最小。 – Marc 2010-01-13 15:19:06