การใช้ต้องใช้หลาย ๆ ครั้งบน idempotent สัญลักษณ์เดียวกันหรือไม่?


11

คือrequireidempotent? เช่นทำ

(require 'helm)

และ

(require 'helm)
(require 'helm)

จบด้วยผลลัพธ์เดียวกัน

คำตอบ:


14

ใช่. จากคุณลักษณะที่มีชื่อ (เหมืองที่เน้น):

ชื่อคุณสมบัติเป็นสัญลักษณ์ที่หมายถึงการรวบรวมฟังก์ชั่นตัวแปร ฯลฯ ไฟล์ที่กำหนดให้ควรมีคุณสมบัติ โปรแกรมอื่นที่ใช้พวกเขาอาจมั่นใจได้ว่าพวกเขาถูกกำหนดโดยต้องการคุณสมบัติ สิ่งนี้จะโหลดไฟล์คำจำกัดความหากยังไม่ได้โหลด

หากต้องการกำหนดให้มีคุณสมบัติให้โทรrequireด้วยชื่อคุณลักษณะเป็นอาร์กิวเมนต์ requireดูในตัวแปรส่วนกลางfeaturesเพื่อดูว่ามีการให้คุณสมบัติที่ต้องการแล้วหรือไม่ ถ้าไม่ได้ก็โหลดคุณลักษณะจากไฟล์ที่เหมาะสม ไฟล์นี้ควรเรียกprovideที่ระดับบนสุดเพื่อเพิ่มคุณสมบัติไปที่features ; ถ้ามันล้มเหลวในการทำเช่นนั้นrequireจะส่งสัญญาณความผิดพลาด


ได้รับการยอมรับสำหรับการอ้างอิงเอกสาร
PythonNut

กรุณารวบรวมข้อมูลจากคำตอบของ Gilles ที่นี่ หรือ @Gilles การใส่คำตอบนี้ให้กับคุณก็สามารถใช้ได้เช่นกัน
daveloyall

13

ใช่มีเงื่อนไขว่ารหัสในhelm.elหรือประการกฎที่ว่ามันต้องเรียกhelm.elc (provide 'helm)การโทร(provide 'helm)ทำเครื่องหมายสัญลักษณ์helmว่าเป็นคุณสมบัติที่โหลดและสิ่งนี้ทำให้การโทรที่สอง(require 'helm)ไม่ต้องทำอะไร

หากแพ็กเกจที่โหลดไม่ได้โทรprovideแล้วrequireจะส่งสัญญาณข้อผิดพลาดและคุณลักษณะไม่ได้ถูกทำเครื่องหมายว่าโหลดดังนั้นการเรียกครั้งที่สอง(require 'helm)จะพยายามโหลดอีกครั้ง (และมักจะล้มเหลวอีกครั้งด้วยเหตุผลเดียวกัน)


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