Czy używanie wymaga wiele razy na tym samym symbolu idempotent?


11

Czy requireidempotentny? tj. zrobić

(require 'helm)

i

(require 'helm)
(require 'helm)

skończyć z tym samym rezultatem?

Odpowiedzi:


14

Tak. Z Nazwanych funkcji (moje podkreślenie):

Nazwa funkcji jest symbolem, który oznacza zbiór funkcji, zmiennych itp. Plik, który je definiuje, powinien zawierać tę funkcję. Inny program, który ich używa, może upewnić się, że zostały zdefiniowane przez wymaganie tej funkcji. Spowoduje to załadowanie pliku definicji, jeśli nie został jeszcze załadowany.

Aby wymagać obecności obiektu, wywołaj go requirez nazwą obiektu jako argumentem. requiresprawdza zmienną globalną, featuresaby sprawdzić, czy żądana funkcja została już udostępniona. Jeśli nie, ładuje funkcję z odpowiedniego pliku . Ten plik powinien wywoływaćprovide na najwyższym poziomie, aby dodać funkcjęfeatures ; jeśli tego nie zrobi, requiresygnalizuje błąd .


Zaakceptowano za cytowanie dokumentów.
PythonNut

Proszę dołączyć informacje z odpowiedzi Gillesa tutaj. Lub, @Gilles, również zadziałałoby umieszczenie tej odpowiedzi w twojej.
daveloyall,

13

Tak, pod warunkiem, że kod jest zgodny z regułą, którą musi wywołać, helm.ellub jest z nim helm.elczgodny (provide 'helm). Wywołanie (provide 'helm)oznacza symbol helmjako załadowaną funkcję , co powoduje, że drugie połączenie (require 'helm)nic nie robi.

Jeśli załadowany pakiet nie wywołuje providenastępnie requiresygnalizuje błąd, a funkcja nie jest oznaczony jako załadowany, więc drugie wywołanie (require 'helm)znowu próbować ładowania (i zazwyczaj nie ponownie z tego samego powodu).


+1 dzięki za dodatkowe informacje. To rozwiązało moje zamieszanie po przeczytaniu dokumentacji.
PythonNut
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.