ฟังก์ชั่นแรกในไฟล์ m (เช่นฟังก์ชั่นหลัก ) จะถูกเรียกใช้เมื่อเรียกไฟล์ m นั้น มันไม่จำเป็นว่าฟังก์ชั่นหลักที่มีชื่อเดียวกับ M-ไฟล์ แต่เพื่อความชัดเจนก็ควร เมื่อฟังก์ชั่นและชื่อไฟล์ต่างกันต้องใช้ชื่อไฟล์เพื่อเรียกฟังก์ชั่นหลัก
ฟังก์ชั่นที่ตามมาทั้งหมดในไฟล์ m- เรียกว่าฟังก์ชั่นท้องถิ่น (หรือ " ฟังก์ชั่นย่อย" ในคำศัพท์ที่เก่ากว่า) สามารถเรียกได้เฉพาะจากฟังก์ชั่นหลักและฟังก์ชั่นท้องถิ่นอื่น ๆ ในไฟล์ m ฟังก์ชั่นในไฟล์ m อื่น ๆ ไม่สามารถเรียกได้ การเริ่มต้นใน R2016b คุณสามารถเพิ่มฟังก์ชันในเครื่องให้กับสคริปต์ได้เช่นกันแม้ว่าพฤติกรรมการกำหนดขอบเขตยังคงเหมือนเดิม (เช่นสามารถเรียกได้จากภายในสคริปต์เท่านั้น)
นอกจากนี้คุณยังสามารถประกาศฟังก์ชั่นภายในฟังก์ชั่นอื่น ๆ เหล่านี้เรียกว่าฟังก์ชั่นที่ซ้อนกันและเหล่านี้สามารถเรียกได้จากภายในฟังก์ชั่นที่พวกเขาจะซ้อนกัน พวกเขายังสามารถเข้าถึงตัวแปรในฟังก์ชั่นที่ซ้อนกันได้ซึ่งทำให้พวกมันมีประโยชน์แม้ว่าจะใช้งานได้ยากก็ตาม
อาหารมากขึ้นสำหรับความคิด ...
มีวิธีการบางอย่างรอบพฤติกรรมการกำหนดขอบเขตหน้าที่ปกติที่อธิบายไว้ข้างต้นเช่นการส่งผ่านฟังก์ชันจัดการเป็นอาร์กิวเมนต์เอาต์พุตตามที่กล่าวไว้ในคำตอบจากSCFrenchและJonas (ซึ่งเริ่มต้นใน R2013b ช่วยอำนวยความสะดวกโดยlocalfunctionsฟังก์ชัน) อย่างไรก็ตามฉันจะไม่แนะนำให้ใช้นิสัยในการใช้กลอุบายดังกล่าวเนื่องจากมีตัวเลือกที่ดีกว่าสำหรับการจัดระเบียบฟังก์ชั่นและไฟล์ของคุณ
ตัวอย่างเช่นสมมติว่าคุณมีหน้าที่หลักAใน M-ไฟล์A.mพร้อมกับฟังก์ชั่นในท้องถิ่นD, และE Fตอนนี้ขอบอกว่าคุณมีสองฟังก์ชั่นอื่น ๆ ที่เกี่ยวข้องBและCใน m ไฟล์B.mและC.mตามลำดับที่คุณยังต้องการที่จะสามารถที่จะเรียกD, และE Fนี่คือตัวเลือกบางส่วนที่คุณมี:
ใส่D, EและFในแต่ละตัวเองแยกต่างหาก M-ไฟล์ของพวกเขาช่วยให้ฟังก์ชั่นอื่น ๆ ที่จะเรียกพวกเขา ข้อเสียคือขอบเขตของฟังก์ชั่นเหล่านี้มีขนาดใหญ่และไม่ได้ จำกัด อยู่เพียงแค่A, BและCแต่กลับหัวกลับหางคือว่านี้จะค่อนข้างง่าย
สร้างdefineMyFunctionsM-ไฟล์ (เช่นในตัวอย่างโจนัส) ด้วยD, EและFฟังก์ชั่นในท้องถิ่นและฟังก์ชั่นหลักที่เพียงผลตอบแทนที่ทำงานจับกับพวกเขา นี้จะช่วยให้คุณสามารถเก็บD, EและFในไฟล์เดียวกัน แต่ก็ไม่ได้ทำอะไรเกี่ยวกับขอบเขตของฟังก์ชั่นเหล่านี้ตั้งแต่ฟังก์ชั่นใด ๆ ที่สามารถเรียกใช้defineMyFunctionsสามารถเรียกพวกเขา จากนั้นคุณต้องกังวลเกี่ยวกับการส่งผ่านฟังก์ชั่นการจัดการเป็นอาร์กิวเมนต์เพื่อให้แน่ใจว่าคุณมีพวกเขาในที่ที่คุณต้องการ
คัดลอกD, EและFเข้าB.mและC.mฟังก์ชั่นท้องถิ่น ข้อ จำกัด นี้ขอบเขตของการใช้งานของพวกเขาไปเพียงA, BและCแต่ทำให้การปรับปรุงและการบำรุงรักษาของรหัสของคุณฝันร้ายเพราะคุณมีสามชุดของรหัสเดียวกันในสถานที่ที่แตกต่างกัน
ใช้ฟังก์ชั่นส่วนตัว ! หากคุณมีA, BและCในไดเรกทอรีเดียวกันคุณสามารถสร้างไดเรกทอรีย่อยที่เรียกว่าprivateและสถานที่D, EและFในนั้นแต่ละแยกมไฟล์ ซึ่งจะ จำกัด ขอบเขตของพวกเขาเพื่อให้พวกเขาเท่านั้นที่สามารถเรียกได้ว่าฟังก์ชั่นในไดเรกทอรีเหนือ (เช่นA, BและC) และช่วยให้พวกเขาร่วมกันในสถานที่เดียวกัน ( แต่ยังคง M-ไฟล์ที่แตกต่างกัน):
myDirectory/
A.m
B.m
C.m
private/
D.m
E.m
F.m
ทั้งหมดนี้ค่อนข้างจะอยู่นอกขอบเขตของคำถามของคุณและอาจมีรายละเอียดมากกว่าที่คุณต้องการ แต่ฉันคิดว่ามันน่าจะดีที่จะได้สัมผัสกับข้อกังวลทั่วไปของการจัดระเบียบไฟล์ m ทั้งหมดของคุณ ;)
^@idigas