2009-07-01 84 views
5

我正在使用類和靜態方法在名稱空間中'範圍'函數,類似於C#。然而,每次我給課程添加一個新的方法,起初都沒有找到。我必須重新啓動MATLAB環境(2007a)才能識別新的方法。如何讓MATLAB識別新添加的靜態方法?

當然,我可以使用'update'或'refresh'類型的命令,以便每次添加函數時都不必重新啓動MATLAB環境。

回答

6

發出此呼籲CLEAR應該這樣做:這

clear classes 

一個不幸的副作用是,它也有效地發出清除所有,它會清除所有在工作區中的變量,以及(然而,當你關閉並重新啓動MATLAB時,無論如何都會發生這種情況)。這種工作空間的清理實際上是有用的,因爲它將刪除與您班級的舊版相同類型的任何變量,這可能不會與您的班級的新版版本正常工作。

函數 REHASH 可能工作,但我懷疑它(我認爲它比類定義處理更多的文件路徑)。

+0

這樣做的工作,謝謝!是否有可能在個人課上做到這一點? – Brendan 2009-07-01 15:56:14

+0

據我所知,沒有辦法使用CLEAR來更新已修改的單個類。這是全部或沒有! =) – gnovice 2009-07-01 16:56:13

+1

試過rehash,沒有任何選項的工作。認爲明確的課程是唯一的方式,歡呼! – Brendan 2009-07-01 20:24:48

0

嘗試「清類名」你們班應該工作的

1

結算情況。

假設你在你的基礎工作空間中有 「MyClass的」 的一個實例:

foo = MyClass; 

現在,假設你編輯MyClass的,並添加新的靜態方法 「棒」:

foo.bar(); % Will cause error, as foo is instance of previous "MyClass" 

然而, 「clear」-ing foo將刪除對前一個類的引用:

clear('foo'); 
foo = MyClass; 
foo.bar(); % this should now work. 

這應該沒問題,如果你基本工作空間中只有一個或兩個類的實例。如果你有類的許多情況下,你的基地工作區,那麼你可能需要編寫一個腳本來清除它們:

varList = whos; 
for iVar = 1:numel(varList) 
    if isequal('MyClass', varList(iVar).class) 
     clear(varlist(iVar).name); 
    end 
end 
clear('varList'); 
clear('MyClass'); 

如果您在多個位置的類的實例,你可能要延長腳本作爲適當的。

如果您要對繼承層次結構中的類進行修改,則只需要最後一次清除類名的調用。

相關問題