ความแตกต่างระหว่างโหลดไฟล์และโหลด


17

ฉันอ่านเอกสารของทั้งสองฟังก์ชั่น แต่พวกเขาดูเหมือนจะไม่ได้เปิดเผยข้อมูลมากนัก อะไรคือความแตกต่างที่แท้จริงระหว่างพวกเขานอกเหนือจากความจริงที่ว่าloadมีฟังก์ชั่นในตัวในซอร์สโค้ด C ในขณะที่โหลดไฟล์เป็นฟังก์ชั่นคอมไพล์รายการแบบโต้ตอบ

ฟังก์ชั่นที่แนะนำให้ใช้init.elเนื่องจากทั้งสองดูเหมือนจะทำงานเดียวกันคืออะไร?


2
ส่วนใดของเอกสารนี้ไม่ชัดเจนในเรื่องนี้? พิจารณารายงานปัญหา doc M-x report-emacs-bugถ้าคุณคิดว่ามันมีความเป็นหนึ่งเดียว ดังที่ @shosti พูดและตามที่เอกสารระบุไว้อย่างชัดเจนว่าload-file" ไม่ได้ใช้load-pathและไม่ได้ต่อท้าย " เพื่อความแตกต่างที่สำคัญสองประการ
ดึง

เห็นแล้วยัง Emacs คู่มือโหนดห้องสมุดเสียงกระเพื่อม
Drew

คำตอบ:


14

มีหลายวิธีในการโหลดไฟล์ Lisp ใน Emacs:

  1. load-fileใช้ชื่อไฟล์ตามตัวอักษร (สัมพัทธ์หรือสัมบูรณ์) และโหลดรหัส ตัวอย่าง:(load-file "/usr/local/share/site-lisp/foo.el")
  2. loadเป็นเหมือนload-fileยกเว้นว่าจะมีความยืดหยุ่นมากขึ้น - คุณสามารถออกจากส่วนขยายและมันจะโหลดไฟล์ "elc" หรือ "el" โดยอัตโนมัติตามความเหมาะสม
    มันยังมีลักษณะเป็นload-pathไดเรกทอรี
    ตัวอย่าง: (load "foo")(หาก "foo.el" อยู่ในไดเรกทอรีปัจจุบันหรือในเส้นทางโหลด ")
  3. load-libraryloadเป็นอินเตอร์เฟซแบบโต้ตอบสำหรับ
  4. requireคล้ายกับloadยกเว้นจะป้องกันไม่ให้ไฟล์โหลดมากกว่าหนึ่งครั้ง (มันต้องมีprovideคำสั่งที่เกี่ยวข้องในตอนท้ายของไฟล์ที่สงสัย) ตัวอย่าง:(require 'foo)

3
requireตัวอย่างของคุณเป็นloadตัวอย่าง ;-)
Drew

ใช้ตัวอย่างเช่นload-file load:)
itsjeyd

2
ขอโทษที่บอกว่าผิด 2 และ 3 :-) load ไม่ดูเป็นภาระเส้นทาง
Malabarba

@ Malabarba โอ๊ะโอใช่แล้วขอบคุณสำหรับการแก้ไข มันสับสนมากกว่าที่ฉันคิด
shosti

8

load-fileและload-libraryเป็นคำสั่งสำหรับการใช้งานแบบโต้ตอบ (ซึ่งความแตกต่างหลักอยู่ในเนื้อหาเริ่มต้นของพรอมต์)

loadเป็นฟังก์ชันพื้นฐานที่จะใช้เมื่อคุณเขียน Elisp (เช่นใน. emacs ของคุณ)

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