Bir m dosyasındaki ilk işlev (yani ana işlev ), o m dosyası çağrıldığında çağrılır. O değil gerekli ana işlevi m-dosyayla aynı ada sahip olduğunu, ancak netlik için o olmalıdır . İşlev ve dosya adı farklı olduğunda, ana işlevi çağırmak için dosya adı kullanılmalıdır.
M dosyasındaki yerel işlevler (veya eski terminolojideki "alt işlevler ") olarak adlandırılan tüm sonraki işlevler yalnızca ana işlev ve o m dosyasındaki diğer yerel işlevler tarafından çağrılabilir. Diğer m dosyalarındaki işlevler onları çağıramaz. Kapsam belirleme davranışı hala aynı olmasına rağmen, R2016b'den başlayarak, komut dosyalarına yerel işlevler de ekleyebilirsiniz (örn. Yalnızca komut dosyasından çağrılabilirler).
Ayrıca, diğer işlevler içindeki işlevleri de bildirebilirsiniz . Bunlara iç içe işlevler denir ve bunlara yalnızca iç içe oldukları işlevden çağrılabilir. İç içe yerleştirildikleri işlevlerdeki değişkenlere de erişebilirler, bu da çalışmak için biraz zor olsa da onları oldukça yararlı kılar.
Düşünce için daha fazla yiyecek ...
Normal fonksiyon kapsam belirleme davranışının etrafında, SCFrench ve Jonas'ın cevaplarında belirtildiği gibi çıkış argümanları olarak fonksiyon tutamaçlarını iletme gibi bazı yollar vardır (R2013b'den başlayarak,localfunctions fonksiyon ) . Ancak, işlevlerinizi ve dosyalarınızı düzenlemek için muhtemelen çok daha iyi seçenekler olduğu için, bu tür hilelere başvurmayı alışkanlık haline getirmeyi önermem.
Örneğin, bir ana işlevi var diyelim Abir m-dosyada A.myerel fonksiyonları ile birlikte D, Eve F. Şimdi iki diğer ilgili işlevleri olduğunu varsayalım Bve Cm-dosyaları B.mve C.mayrıca arama yapabilmek istediğiniz, sırasıyla D, Eve F. İşte sahip olduğunuz bazı seçenekler:
, Ve her birini kendi ayrı m dosyalarına koyun D, diğer işlevlerin onları çağırmasına izin verin. Olumsuz bu fonksiyonların kapsamı geniştir ve sadece sınırlı olmamasıdır , ve , ama ters bu oldukça basit olmasıdır.EFABC
Bir oluşturma defineMyFunctionsile (Jonas'ın örnekte olduğu gibi) m-dosyası D, Eve Fyerel fonksiyonları ve bir ana fonksiyonu olarak o basitçe döner onlara kolları çalışır. Bu saklamanızı sağlar D, Eve Faynı dosyada, ancak çağırabilir herhangi fonksiyonu beri bu fonksiyonların kapsamına ilişkin bir şey yapmaz defineMyFunctionsbunları çağırabilir. Ayrıca, ihtiyacınız olan yere sahip olduğunuzdan emin olmak için işlev tutamaçlarını argümanlar olarak iletme konusunda endişelenmeniz gerekir.
Kopya D, Eve Fiçine B.mve C.myerel işlevler gibi. Bu, kullanımlarının kapsamını sadece A, Bve ile sınırlandırır C, ancak farklı yerlerde aynı kodun üç kopyasına sahip olduğunuz için kodunuzun güncellenmesini ve bakımını kabus yapar.
Özel işlevleri kullanın ! Eğer varsa A, Bve Caynı dizinde, bir adlandırılan alt dizin oluşturabilir privateve yeri D, Eve Forada ayrı bir m-dosya olarak her. Bu sadece hemen yukarıdaki dizinde fonksiyonları tarafından çağrılan (yani böylece onların kapsamını sınırlar A, Bve C) ve aynı yerde biraraya tutar (ama yine de farklı m-dosyaları):
myDirectory/
A.m
B.m
C.m
private/
D.m
E.m
F.m
Bütün bunlar sorunuzun kapsamı dışında kalıyor ve muhtemelen ihtiyacınız olandan daha ayrıntılı, ancak tüm m dosyalarınızı düzenlemenin daha genel endişesine değinmenin iyi olabileceğini düşündüm. ;)
^, @idigas