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 A
bir m-dosyada A.m
yerel fonksiyonları ile birlikte D
, E
ve F
. Şimdi iki diğer ilgili işlevleri olduğunu varsayalım B
ve C
m-dosyaları B.m
ve C.m
ayrıca arama yapabilmek istediğiniz, sırasıyla D
, E
ve 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.E
F
A
B
C
Bir oluşturma defineMyFunctions
ile (Jonas'ın örnekte olduğu gibi) m-dosyası D
, E
ve F
yerel fonksiyonları ve bir ana fonksiyonu olarak o basitçe döner onlara kolları çalışır. Bu saklamanızı sağlar D
, E
ve F
aynı dosyada, ancak çağırabilir herhangi fonksiyonu beri bu fonksiyonların kapsamına ilişkin bir şey yapmaz defineMyFunctions
bunları ç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
, E
ve F
içine B.m
ve C.m
yerel işlevler gibi. Bu, kullanımlarının kapsamını sadece A
, B
ve 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
, B
ve C
aynı dizinde, bir adlandırılan alt dizin oluşturabilir private
ve yeri D
, E
ve F
orada 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
, B
ve 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