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 localfunctions
fungsi). 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 A
dalam sebuah m-file A.m
, bersama dengan fungsi lokal D
, E
dan F
. Sekarang katakanlah Anda memiliki dua fungsi terkait lainnya B
dan C
dalam m-file B.m
dan C.m
masing-masing, bahwa Anda juga ingin dapat menelepon D
, E
dan F
. Berikut beberapa opsi yang Anda miliki:
Masukkan D
,, E
dan F
masing - 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
, B
dan C
, tapi terbalik adalah bahwa ini adalah cukup sederhana.
Buat defineMyFunctions
m-file (seperti dalam contoh Jonas') dengan D
, E
, dan F
sebagai fungsi lokal dan fungsi utama yang hanya kembali berfungsi menangani mereka. Ini memungkinkan Anda untuk menyimpan D
,, E
dan F
dalam file yang sama, tetapi tidak melakukan apa-apa mengenai ruang lingkup fungsi-fungsi ini karena fungsi apa pun yang dapat memanggil defineMyFunctions
dapat memanggil mereka. Anda juga harus khawatir tentang melewati fungsi menangani sebagai argumen untuk memastikan Anda memilikinya di mana Anda membutuhkannya.
Salin D
, E
dan F
ke dalam B.m
dan C.m
sebagai fungsi lokal. Ini membatasi ruang lingkup penggunaannya hanya A
,, B
dan 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 C
dalam direktori yang sama, Anda dapat membuat subdirektori bernama private
dan tempat D
, E
dan F
di 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