2013-02-21 71 views
0

我有兩件事我想用我的matlab函數來做。我有一個函數可以從一系列文件中獲取數據。說我有這個文件的結構:從Matlab函數導出數據到全局框架和默認的matlab參數

數1:

我希望能夠有一些選擇的變量,成爲全球訪問的功能和函數完成後繼續存在。這是說,我有以下功能:

[] = function(directory) 
    b = read(directory) 
    struct c = (do some stuff with b) 
    somehow globalise c 
end 

我明白,你可以有c = function(directory),然後傳遞變量但是我不希望O此,我寧願變量c只是堅持在全球範圍內。這可以做到嗎?

數2:

是否有可能爲一個matlab函數有默認參數。讓我們從上面看看這個功能。我想要做的是將目錄默認爲當前目錄。例如,如果下面的數據結構存在:

MatlabMainFolder 
    -> MatlabFunctions 
    -> Data 

用戶應該能夠在數據運行function,它會使用數據directory.But也應該能夠達到相同的效果做function('../Data')從MatlabFunctions directy 。這可能嗎?

+0

有人想使用'assignin'添加答案,這是一個matlab函數來做到這一點嗎?如果您還在此處添加了答案中的信息,我會將該答案標記爲正確。 – 2013-02-21 05:22:55

回答

2

第一:

我認爲下面應該做一個全局變量來從函數內訪問:

[] = function(directory) 
    b = read(directory) 
    global c;   <------ 
    struct tmp = (do some stuff with b) 
    c = tmp;   <------ 
end 

然後,在你想c可用的所有其他文件添加global c,使用前它。儘管如此,我會建議只使用c = function...

如@Ben所示,assignin也可用於將變量分配到不同的工作空間。這樣,從一個函數中,任何變量都可以在'base'工作區中分配,該工作區也是所有其他文件可以訪問的工作區。在這種情況下:

assignin('base','c',c) 

將創建在基工作區的可變c,具有相同的值作爲函數文件c。 (在函數的末尾添加此行)。

二:

你可以做這樣的事情:

function(path) 
    if nargin<1 
     path = '../Data'; 
    end 

    % do things with path 
end 

這樣,如果function叫不輸入,默認路徑../Data將被使用,否則,作爲輸入的路徑使用。 nargin將等於作爲輸入給出的參數的數量。

1

對1)globals以及asignin往往皺起了眉頭。你也可以使用persistent

僞代碼片段:

function out=fun((directory) 
persistent out 
if isempty(out) 
    fill out 

return out; 

甚至處理在你覺得喜歡去現代案例對象;)

要2):瞭解doc InputParser - 它比許多更多的工作其他語言 - 但這是可能的。