ฟังก์ชั่นแรกในไฟล์ 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
แต่กลับหัวกลับหางคือว่านี้จะค่อนข้างง่าย
สร้างdefineMyFunctions
M-ไฟล์ (เช่นในตัวอย่างโจนัส) ด้วย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