2012-12-17 30 views
0

我學習MatLab的&打一個路障。MatLab的全局函數問題

我有一個interface.fig文件,interface.m這是作爲我的「主」 GUI窗口。從那裏另一個文件;調用bright.m

文件明亮的需要更新的主文件全局變量以及通話功能,我已經制定了全局變量出來,但不能調用函數。

嘗試一切,看着做這樣的事情:

reDisplay(); 
evalin('base','reDisplay()'); 
interface.reDisplay(); 
interface>reDisplay(); 

但沒有運氣。

+0

你能不能具體介紹爲什麼您無法從bright.m內調用函數?爲什麼你不能簡單地調用'output = myfunction(myArgs);'? – jerad

回答

0

如果在Matlab函數被定義內部的m文件具有比函數名不同的文件名 - 那麼就沒有調用從其m文件超出此功能的方式。

爲了使您的reDisplay功能是可見的bright.m,你應該叫reDisplay.m

+0

情況總是如此嗎?我似乎記得,如果你有一個與文件名不同的函數,它仍然會被調用,儘管使用了m文件的名稱而不是函數名。 – slayton

+0

嗯,我有一個窗口的選項框的小窗口打開和改變時,它需要調用這個全局函數來設置的改變.. – Callum

1

只有在M檔的第一個函數自己的M文件有此功能是從該文件以外的調用。如果你想讓你的函數全局可訪問,那麼你需要將它們保存在獨立的文件中。

如果你需要的狀態是這些職能之間的全局訪問它們作爲參數傳遞或考慮使用面向對象的方法來解決你的問題。

+0

和第一功能必須是相同的文件名。 – dinkelk

+0

@dinkelk在R2012b上,這是不正確的。 m文件中的第一個函數是調用函數文件時執行的。嘗試創建一個簡單的函數,但用另一個名稱保存該文件。你會得到一個警告,說「函數'XYZ'通過它的文件名'ABC'」被MATLAB知道。另外,你可以調用XYZ功能使用名稱ABC – slayton

+0

有趣的是,我剛在R2012b的Linux和我沒有得到你所描述的行爲。我將不得不更多地考慮這一點。 – dinkelk