Là sử dụng yêu cầu nhiều lần trên cùng một biểu tượng idempotent?


11

Là bình thường require? tức là làm

(require 'helm)

(require 'helm)
(require 'helm)

kết thúc với kết quả tương tự?

Câu trả lời:


14

Đúng. Từ các tính năng được đặt tên (nhấn mạnh của tôi):

Tên tính năng là ký hiệu đại diện cho tập hợp các hàm, biến, v.v ... Tệp xác định chúng sẽ cung cấp tính năng này. Một chương trình khác sử dụng chúng có thể đảm bảo chúng được xác định bằng cách yêu cầu tính năng này. Điều này tải tập tin định nghĩa nếu nó chưa được tải.

Để yêu cầu sự hiện diện của một tính năng, hãy gọi requirevới tên tính năng làm đối số. requirenhìn vào biến toàn cục featuresđể xem tính năng mong muốn đã được cung cấp chưa. Nếu không, nó tải tính năng từ tệp thích hợp . Tập tin này nên gọiprovide ở cấp cao nhất để thêm tính năng nàyfeatures ; nếu nó không làm như vậy, requirebáo hiệu một lỗi .


Được chấp nhận để trích dẫn các tài liệu.
PythonNut

Vui lòng kết hợp thông tin từ câu trả lời của Gilles tại đây. Hoặc, @Gilles, đưa câu trả lời này vào của bạn cũng sẽ hoạt động.
daveloyall

13

Có, với điều kiện là mã trong helm.elhoặc helm.elctôn trọng quy tắc mà nó phải gọi (provide 'helm). Cuộc gọi (provide 'helm)đánh dấu biểu tượng helmlà một tính năng được tải và điều này khiến cuộc gọi thứ hai (require 'helm)không làm gì cả.

Nếu gói được tải không gọi providethì requirebáo hiệu lỗi và tính năng không được đánh dấu là đã tải, do đó, cuộc gọi thứ hai (require 'helm)sẽ thử tải lại (và thường thất bại lần nữa vì lý do tương tự).


+1 Cảm ơn bạn đã biết thêm thông tin. Nó giải quyết sự nhầm lẫn của tôi sau khi đọc các tài liệu.
PythonNut
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.