Nếu bạn load
liên tục thư viện, tệp đó sẽ được đọc và mã của nó được đánh giá liên tục (mỗi lần bạn tải nó).
Nếu bạn require
liên tục thư viện, thư viện sẽ load
một lần (nhiều nhất - và hoàn toàn không nếu thư viện đã được tải).
require
cung cấp hiệu quả này ngay cả khi require
ban đầu không được sử dụng để tải thư viện, bởi vì (phần lớn) các thư viện chứa mã (provide 'FEATURE)
cho FEATURE
tên cụ thể của họ . Mã đó được đánh giá khi thư viện được tải, bất kể nó được tải như thế nào và tại thời điểm đó, nó cập nhật dữ liệu sẽ require
kiểm tra khi quyết định xem nó có cần phải làm gì không.
Chủ yếu là bạn muốn sử dụng require
trong mã của riêng bạn, nếu bạn cần đảm bảo rằng một thư viện nhất định đã được tải.
Lý do bạn thường không cần phải làm điều này với các gói ELPA là vì trình quản lý gói tự động xử lý bất kỳ cookie tự động tải nào trong gói và tạo một tệp tự động tải cho gói đó. Khi hệ thống gói được khởi chạy khi bạn khởi động Emacs, tệp tự động tải cho mỗi gói được ước tính, xác định tất cả các chức năng được tải tự động. Khi một chức năng tự động tải được gọi, thư viện chứa định nghĩa thực sự của chức năng sẽ được tự động tải.
Các tác giả gói có thể thêm cookie tự động tải vào từng chức năng mà người dùng có thể sẽ gọi trực tiếp và do đó, với điều kiện là mong muốn của họ là chính xác, bạn sẽ không cần phải gọi require
hoặc tải một cách rõ ràng gói để sử dụng.
Lưu ý rằng bạn cũng có thể xác định tự động tải tùy chỉnh của riêng bạn. Xem C-hig (elisp) Autoload
RETvà cũng (elisp) Hooks for Loading
nếu bạn muốn sử dụng cấu hình thư viện tải chậm và trì hoãn tùy chỉnh trong cấu hình của riêng bạn. (Phần sau nói "không đánh giá mã này cho đến khi thư viện này được tải", liên kết độc đáo với "không tải thư viện này cho đến khi cần" cơ chế tự động tải).
M-x describe-function
đọc chuỗi doc. akaC-h f
GõM-x describe-function RET require RET
và đọc doc-string. Sau đó nhậpM-x describe-function RET load-file RET
và đọc chuỗi doc. Sau đó nhậpM-x describe-function RET load RET
và đọc chuỗi doc. Sau khi đọc tất cả ba chuỗi doc, vui lòng chỉnh sửa câu hỏi của bạn để so sánh và đối chiếu cả ba chức năng và làm rõ những gì bạn vẫn không hiểu trong mối quan hệ. Chúng tôi sử dụng cùng một quy trình cho các biến - tức là ,M-x describe-variable
.