คือrequire
idempotent? เช่นทำ
(require 'helm)
และ
(require 'helm)
(require 'helm)
จบด้วยผลลัพธ์เดียวกัน
คือrequire
idempotent? เช่นทำ
(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)
จะพยายามโหลดอีกครั้ง (และมักจะล้มเหลวอีกครั้งด้วยเหตุผลเดียวกัน)