2009-08-14 20 views
7

MATLAB I'de, tek bir dosyada birden fazla işlevi tanımlayabilirim, sadece bu dosya için harici olarak görünen ilk tanımlanmış işlev. Alternatif olarak, her bir işlevi kendi dosyasına koyabilir ve tüm bunları genel olarak yol boyunca görünür hale getirebilirim. Her menü öğesinin farklı bir işlevi çalıştırdığı menü tabanlı bir uygulama yazıyorum. Şu anda, bunların hepsi, gezinmek için giderek zorlaşan büyük bir dosyada. Yapmak istediğim, ilgili işlevlerin gruplarını ayrı dosyalara koymak.MATLAB'da 'include' davranışını nasıl taklit edebilirim?

Sanırım çocuk işlevlerini ayrı bir dizine ekleyerek ve sonra dizini ana işlevimdeki yollara ekleyerek böyle bir şey yapabilirim, ancak bu biraz dağınık ve belirsiz hissediyor.

Daha iyi bir öneride bulunabilir mi?

Not: Ben MATLAB 2006 ile en tanıdık değilim, ama MATLAB 2009.

+0

İlgili: http://stackoverflow.com/questions/8883499/can-i-import-a-namespace-globally-without-explicitly-calling-import-in-each-and?lq=1 –

cevap

14

MATLAB path'u değiştirmekten kaçınan bir öneri, private function directory kullanmaktır. Örneğin:

Diyelim ki (MATLAB yolda zaten) dizindeki \MATLAB\temp\ içinde test.m adlı bir işlev var diyelim. test.m içinde kendi m-dosyalarına yerleştirmek istediğiniz yerel işlevler varsa ve bunlara yalnızca test.m erişmek istiyorsanız, ilk olarak private adı verilen \MATLAB\temp\ içinde bir alt dizin oluşturursunuz. Daha sonra, bu private alt dizininde bireysel yerel işlev m-dosyalarını test.m'dan koyun.

private alt dizin MATLAB yoluna eklenecek gerekmez (şeylerin düzgün çalışması için aslında, bu yola eklenmemelidir olmalıdır). Sadece test.m dosya ve private alt dizinin hemen üstündeki dizindeki diğer m-dosyaları, içerdiği işlevlere erişebilir. Özel işlevleri kullanarak, local functions (sınırlı kapsam, işlev aşırı yüklenme, vb.) Davranışını, tüm işlevleri aynı m-dosyasına koymak zorunda kalmadan etkin bir şekilde taklit edebilirsiniz (bazı uygulamalar için çok büyük olabilir).

+0

Bunu yapabileceğini bilmiyordum. Nasıl çalıştığını görmeye gideceğim. En azından tüm işlev dosyaları sessiz bir köşede gizlenecek! –

+1

Buraya bağlı dokümanlar kaldırılmış gibi görünüyor! Özel işlev dizinleri geçersiz sayılıyor mu? – Dan

+1

@Dan: Hayır, eski değil. TMW çevrimiçi dokümanlarını güncellediğinden beri eski ve kötü bir bağlantı. Yeni bağlantılarda düzenledim. – gnovice

5

Belki böyle bir şey, tabii

function foobar 
    addpath C:\Include\ModuleX 

    %% Script file residing in ModuleX 
    some_func(); 
end 

, MODULEX yükseltme sürecinde yaşıyorum foobar'dan çıktıktan sonra arama yolunuzda kalacaktır.

path(pathdef) 

fazla ayrıntı için ADDPATH görme: yeniden başlatmadan varsayılan yoluna ayarlayın isterseniz, o zaman bu satırı ekleyin.

+0

+1 çünkü dikkate aldığım makul bir çözümdür. –

+0

Dosyaların bir klasör hiyerarşisinde olması durumunda, tümünü 'addpath (genpath (PATH)); 'ile de ekleyebilirsiniz. 'Genpath'command genellikle çok yavaş olduğunu unutmayın. – tashuhka

1

İşlevleri ad alanlarına ayırmak için "+" ile başlayan alt klasörleri kullanabilirsiniz.Örneğin

:

foo.bar() % prints hello world 

fazla bilgi bulunabilir:

yer klasördeki bir fonksiyonu "çubuk", "+ foo"

function bar() 
print('hello world'); 

Bu fonksiyon olarak kullanılabilir Burada:

What is the closest thing MATLAB has to namespaces?

İlgili konular