คือrequireidempotent? เช่นทำ
(require 'helm)
และ
(require 'helm)
(require 'helm)
จบด้วยผลลัพธ์เดียวกัน
คือrequireidempotent? เช่นทำ
(require 'helm)
และ
(require 'helm)
(require 'helm)
จบด้วยผลลัพธ์เดียวกัน
คำตอบ:
ใช่. จากคุณลักษณะที่มีชื่อ (เหมืองที่เน้น):
ชื่อคุณสมบัติเป็นสัญลักษณ์ที่หมายถึงการรวบรวมฟังก์ชั่นตัวแปร ฯลฯ ไฟล์ที่กำหนดให้ควรมีคุณสมบัติ โปรแกรมอื่นที่ใช้พวกเขาอาจมั่นใจได้ว่าพวกเขาถูกกำหนดโดยต้องการคุณสมบัติ สิ่งนี้จะโหลดไฟล์คำจำกัดความหากยังไม่ได้โหลด
หากต้องการกำหนดให้มีคุณสมบัติให้โทร
requireด้วยชื่อคุณลักษณะเป็นอาร์กิวเมนต์requireดูในตัวแปรส่วนกลางfeaturesเพื่อดูว่ามีการให้คุณสมบัติที่ต้องการแล้วหรือไม่ ถ้าไม่ได้ก็โหลดคุณลักษณะจากไฟล์ที่เหมาะสม ไฟล์นี้ควรเรียกprovideที่ระดับบนสุดเพื่อเพิ่มคุณสมบัติไปที่features; ถ้ามันล้มเหลวในการทำเช่นนั้นrequireจะส่งสัญญาณความผิดพลาด
ใช่มีเงื่อนไขว่ารหัสในhelm.elหรือประการกฎที่ว่ามันต้องเรียกhelm.elc (provide 'helm)การโทร(provide 'helm)ทำเครื่องหมายสัญลักษณ์helmว่าเป็นคุณสมบัติที่โหลดและสิ่งนี้ทำให้การโทรที่สอง(require 'helm)ไม่ต้องทำอะไร
หากแพ็กเกจที่โหลดไม่ได้โทรprovideแล้วrequireจะส่งสัญญาณข้อผิดพลาดและคุณลักษณะไม่ได้ถูกทำเครื่องหมายว่าโหลดดังนั้นการเรียกครั้งที่สอง(require 'helm)จะพยายามโหลดอีกครั้ง (และมักจะล้มเหลวอีกครั้งด้วยเหตุผลเดียวกัน)