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?

PythonNut
źródło

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 .

księżycowy
źródło
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).

Gilles „SO- przestań być zły”
źródło
+1 dzięki za dodatkowe informacje. To rozwiązało moje zamieszanie po przeczytaniu dokumentacji.
PythonNut