2009-07-01 15 views
5

C# 'ye benzer bir ad alanında işlevleri' kapsam 'için sınıfları ve statik yöntemleri kullanıyorum. Ancak, her seferinde bir sınıfa yeni bir yöntem eklediğimde, ilk olarak bulamaz. Tanınacak yeni yöntemler için MATLAB ortamını (2007a) yeniden başlatmalıyım.MATLAB yeni eklenen statik yöntemleri tanımak için nasıl kullanılır?

Her kullanışımda MATLAB ortamını yeniden başlatmam gerekmeyecek şekilde kullanabileceğim bir 'update' veya 'refresh' türü komut var mı?

cevap

6

CLEAR bu çağrısında bulunma yapmalıyım: Bu

clear classes 

biri talihsiz yan etkisi de etkili de çalışma alanında değişkenlerin tümünü temizler hangi bir açık tüm sorunları olmasıdır (Ancak, MATLAB'ı kapatıp yeniden başlattığınızda bu yine de olur. Çalışma alanının bu temizliği aslında bir amaca hizmet eder, çünkü sınıfınızın eski sürümüyle aynı türdeki tüm değişkenleri kaldıracaktır; bu, sınıfınızın yeni sürümüyle doğru şekilde çalışmayabilir.

fonksiyon REHASHmay eser ama (ben sınıf tanımlarıyla daha dosya yolları ile daha fırsatlar düşünüyorum) şüpheliyim.

+0

Bu işe yarar, teşekkürler! Bunu bireysel bir sınıfta yapmak mümkün mü? – Brendan

+0

Bildiğim kadarıyla, değiştirilmiş bireysel sınıfları güncellemek için CLEAR'ı kullanmanın bir yolu yok. Hepsi ya da hiç! =) – gnovice

+1

Denenmiş rehash, seçeneklerin hiçbiri işe yaramıyor. Açık sınıfların tek yol olduğunu düşün, şerefe! – Brendan

0

"net sınıfadı" çalışması gerekir sınıfın

+0

Korkarım Bu işe yaramaz, hata olmadan kabul eder ancak sınıf güncellenmez – Brendan

+0

Bu [daha yeni MATLAB sürümleriyle çalışmalıdır] (http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky.html) –

1

Clearing örnekleri deneyin. Şimdi

foo = MyClass; 

Eğer Sınıfım düzenlemek ve yeni statik yöntem "bar" eklemek varsayalım:

Eğer baz çalışma alanında "Sınıfım" örneğini sahip olduğunu varsayalım

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

Ancak, "net" -ing foo önceki sınıfa başvurusunu kaldıracaktır:

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

Bu iyi olmalı eğer Temel çalışma alanınızda yalnızca bir veya iki sınıfı var. Eğer baz çalışma alanında sınıfın birçok örneği varsa, o zaman bunları temizlemek için bir senaryo yazmak isteyebilirsiniz: Eğer daha fazla yerde sınıfın örneklerini varsa

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

, komut dosyasını genişletmek isteyebilirsiniz uygun.

Sınıf adını temizlemeniz için yapılan son çağrı yalnızca miras hiyerarşisindeki sınıflarda değişiklik yaparsanız gerekli olabilir.

+0

ayrıca bkz. http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky.html, aynı zamanda kolayca unutabileceğiniz örneklerin (ör. "mlocked" işlevlerinde) –

İlgili konular