เมื่อใดที่ฉันควรใช้ autoload แทนที่จะต้องการ?


30

จากสิ่งที่ฉันเข้าใจrequireใช้เพื่อโหลดโค้ดขนาดใหญ่ (บางอย่างเช่นโมดูล) ถึงแม้ว่ามันจะสามารถโหลดฟังก์ชั่นแต่ละอย่างได้

Autoload ในอีกด้านหนึ่งเท่านั้นจะลงทะเบียนฟังก์ชั่นและป้องกันการโหลดไปยังเวลาดำเนินการเท่านั้น

ฉันเพิ่งอ่านบทความที่สนับสนุนการใช้งานautoloadเฉพาะ

ดีautoloadกว่าrequireไหม? กรณีการใช้งานทั่วไปของแต่ละกรณีมีอะไรบ้าง


3
@Gilles: FWIW ฉันไม่เห็นด้วยกับการที่คุณลบแท็กautoloadและrequireจากคำถามนี้ การเพิ่มแท็กทำได้librariesดี แต่ตอนนี้ทุกคนที่ค้นหาใช้แท็กสำหรับคำถามเกี่ยวกับautoloadหรือrequireจะไม่พบแท็กนี้ นั่นเป็นทั้งฟังก์ชั่น Emacs-Lisp ที่สำคัญซึ่งผู้คนจะค้นหา เลวร้ายเกินไป. และคิดว่ามีประโยชน์อย่างไรelispและlibraries(โดยเฉพาะelisp) จะเป็นจริงสำหรับไซต์ Emacs: พวกเขาไม่ได้แยกแยะความแตกต่างใน Emacsland ฉันกลัว (แต่ไม่ฉันไม่ได้ต่อต้านพวกเขาและใช้พวกเขา)
ดึง

@Drew ฉันจะโดยการอภิปราย meta บังคับ หากคุณคิดว่าหลักการทั่วไปนี้ใช้ไม่ได้กับที่นี่โปรดยกเมตาดาต้าขึ้น
Gilles 'หยุดความชั่วร้าย'

1
@Gilles: เสร็จแล้ว ใช่ฉันอ่านและคิดว่านั่นอาจเป็นสิ่งที่กระตุ้นให้คุณ ฉันไม่เห็นด้วยกับหลักการทั่วไปมากมาย ไม่ได้หมายความว่าการติดตามพวกเขาด้วยวิธีการแบบผ้าห่มนั้นเป็น TRT เสมอ
ดึง

2
ฉันเห็นด้วยกับ Drew: เนื่องจากคำถามนี้เกี่ยวกับการแยกความแตกต่างระหว่างเคสการใช้งานautoloadและrequireฉันคิดว่าแท็กเหล่านั้นมีเหตุผล อันที่จริงแล้วการติดฉลากคำถามนี้ [เท่านั้น] ด้วยlibrariesเกินความเป็นไปได้ ฉันใช้requireเพื่อเรียกการโหลด "my-foobar-cfg" ซึ่งตามชื่อแนะนำมีเพียงการกำหนดค่าของฉันเท่านั้นไม่ใช่ไลบรารี
paprika

คำตอบ:


28

autoloadrequireไม่ได้ใช้แทนสำหรับ โดยทั่วไปrequireจะใช้เพื่อให้แน่ใจว่ามีการโหลดไฟล์บางไฟล์ autoloadในทางกลับกัน Emacs จะให้คำแนะนำว่าไฟล์ใดที่จะค้นหาฟังก์ชั่นที่กำหนดโดยไม่ต้องโหลดไฟล์ทันที เมื่อเรียกใช้ฟังก์ชันโหลดอัตโนมัติเท่านั้นไฟล์ที่สอดคล้องกันจะถูกโหลด

โดยพื้นฐานแล้วautoloadคุณสามารถชะลอการโหลดไฟล์ทั้งหมดจนถึงช่วงเวลาที่คุณต้องการ นี่คือเหตุผลที่แพคเกจ (โดยเฉพาะอย่างยิ่งใหญ่) มักจะกำหนดฟังก์ชั่นการเข้าเป็นautoloads

autoloadหากคุณต้องการที่จะทำการปรับแต่งหนักสำหรับแพคเกจที่คุณมักจะออกจากโชคด้วย หากคุณยังคงต้องการที่จะหลีกเลี่ยงจากนั้นคุณสามารถเลื่อนการปรับแต่งของคุณจนกว่าหลังจากที่ไฟล์ได้รับการโหลดโดยใช้requireeval-after-load

คู่มือ Emacs ครอบคลุมหัวข้อนี้ในส่วนต่อไปนี้:


2
บางทีที่ควรค่าแก่การกล่าวถึงยัง: autoloadคือ (มากหรือน้อย) เกี่ยวกับการให้คำจำกัดความคำสั่งเพื่อให้คุณสามารถใช้คำสั่งเหล่านั้นได้ requireเป็นเรื่องเกี่ยวกับการทำให้ทุกอย่างในห้องสมุด (และในห้องสมุดที่ห้องสมุดต้องการใช้ซ้ำ) มีมากกว่า Emacs กว่าคำสั่ง ( แต่ใช่แน่นอนครั้งหนึ่งเคยเป็นคำสั่ง autoloaded ถูกเรียกห้องสมุดทั้งหมดถูกโหลด.)
ดึง

4

ในแง่ของการเริ่มต้น Emacs อย่าเลือกอย่างใดอย่างหนึ่ง ผู้ใช้ GitHub jwiegley มีมาโครการประกาศแพ็คเกจการใช้งานที่ยอดเยี่ยมซึ่งจะต้องการหรือโหลดแพคเกจตามที่กำหนดโดยต้องการโดยอัตโนมัติ ที่ดีที่สุดที่ใช้ในการเลื่อนการโหลดของแพคเกจที่สามารถโหลดตามความต้องการ


3

หากคุณต้องการให้ฟีเจอร์บางอย่างสามารถโหลดได้และสามารถใช้งานได้โดยตรงเมื่อ Emacs ของคุณเริ่มทำงานให้ใช้ require หรือใช้ autoload แทน ฉันให้ความสำคัญกับเวลาเริ่มต้นส่วนตัวมาก (จริง ๆ แล้วฉันรีสตาร์ท Emacs สองสามครั้งต่อสัปดาห์บางครั้งหลายครั้งต่อวัน) ดังนั้นฉันจึงยอมรับว่ามันจะใช้เวลาเล็กน้อยเมื่อ Emacs ทำงานอัตโนมัติเมื่อต้องการ ดังนั้นคิดเกี่ยวกับสิ่งที่คุณต้องการให้สามารถใช้งานได้โดยตรงหลังจาก Emacs เริ่มทำงานและสิ่งที่สามารถโหลดได้เมื่อจำเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.