Fungsi pertama dalam file-m (yaitu fungsi utama ), dipanggil ketika file-m dipanggil. Tidak perlu bahwa fungsi utama memiliki nama yang sama dengan file-m, tetapi untuk kejelasan seharusnya . Ketika fungsi dan nama file berbeda, nama file harus digunakan untuk memanggil fungsi utama.
Semua fungsi selanjutnya dalam file-m, yang disebut fungsi lokal (atau "subfungsi" dalam terminologi yang lebih lama), hanya dapat dipanggil oleh fungsi utama dan fungsi lokal lainnya dalam file-m itu. Fungsi di m-file lain tidak dapat memanggil mereka. Mulai di R2016b, Anda dapat menambahkan fungsi lokal ke skrip juga, meskipun perilaku pelingkupan masih sama (yaitu mereka hanya dapat dipanggil dari dalam skrip).
Selain itu, Anda juga dapat mendeklarasikan fungsi dalam fungsi lainnya. Ini disebut fungsi bersarang , dan ini hanya bisa dipanggil dari dalam fungsi yang disarangkan. Mereka juga dapat memiliki akses ke variabel dalam fungsi di mana mereka bersarang, yang membuatnya cukup berguna meskipun sedikit sulit untuk dikerjakan.
Lebih banyak makanan untuk dipikirkan ...
Ada beberapa cara di sekitar perilaku pelingkupan fungsi normal yang diuraikan di atas, seperti fungsi lewat berfungsi sebagai argumen keluaran seperti yang disebutkan dalam jawaban dari SCFrench dan Jonas (yang, dimulai pada R2013b, difasilitasi oleh localfunctionsfungsi). Namun, saya tidak akan menyarankan untuk membiasakan diri menggunakan trik seperti itu, karena ada banyak pilihan yang lebih baik untuk mengatur fungsi dan file Anda.
Sebagai contoh, katakanlah Anda memiliki fungsi utama Adalam sebuah m-file A.m, bersama dengan fungsi lokal D, Edan F. Sekarang katakanlah Anda memiliki dua fungsi terkait lainnya Bdan Cdalam m-file B.mdan C.mmasing-masing, bahwa Anda juga ingin dapat menelepon D, Edan F. Berikut beberapa opsi yang Anda miliki:
Masukkan D,, Edan Fmasing - masing dalam file-m terpisah masing-masing, yang memungkinkan fungsi lain untuk memanggil mereka. The downside adalah bahwa ruang lingkup fungsi ini adalah besar dan tidak terbatas hanya A, Bdan C, tapi terbalik adalah bahwa ini adalah cukup sederhana.
Buat defineMyFunctionsm-file (seperti dalam contoh Jonas') dengan D, E, dan Fsebagai fungsi lokal dan fungsi utama yang hanya kembali berfungsi menangani mereka. Ini memungkinkan Anda untuk menyimpan D,, Edan Fdalam file yang sama, tetapi tidak melakukan apa-apa mengenai ruang lingkup fungsi-fungsi ini karena fungsi apa pun yang dapat memanggil defineMyFunctionsdapat memanggil mereka. Anda juga harus khawatir tentang melewati fungsi menangani sebagai argumen untuk memastikan Anda memilikinya di mana Anda membutuhkannya.
Salin D, Edan Fke dalam B.mdan C.msebagai fungsi lokal. Ini membatasi ruang lingkup penggunaannya hanya A,, Bdan C, tetapi membuat pembaruan dan pemeliharaan kode Anda menjadi mimpi buruk karena Anda memiliki tiga salinan kode yang sama di tempat yang berbeda.
Gunakan fungsi pribadi ! Jika Anda memiliki A, B, dan Cdalam direktori yang sama, Anda dapat membuat subdirektori bernama privatedan tempat D, Edan Fdi sana, masing-masing sebagai m-file terpisah. Hal ini membatasi ruang lingkup mereka sehingga mereka hanya dapat dipanggil oleh fungsi dalam direktori segera di atas (yaitu A, B, dan C) dan membuat mereka bersama-sama di tempat yang sama (tapi masih berbeda m-file):
myDirectory/
A.m
B.m
C.m
private/
D.m
E.m
F.m
Semua ini agak di luar ruang lingkup pertanyaan Anda, dan mungkin lebih detail daripada yang Anda butuhkan, tapi saya pikir mungkin lebih baik untuk menyentuh pada keprihatinan yang lebih umum dari mengatur semua file-m Anda. ;)
^, @idigas