Чи використовуєте вимагати кілька разів для одного і того ж символу idempotent?


11

Є чи requireідемпотентна? тобто робити

(require 'helm)

і

(require 'helm)
(require 'helm)

закінчитися тим самим результатом?

Відповіді:


14

Так. З іменованих функцій (моє наголос):

Назва функції - це символ, який позначає сукупність функцій, змінних тощо. Файл, який їх визначає, повинен містити функцію. Інша програма, яка їх використовує, може гарантувати, що вони визначені, вимагаючи функції. Це завантажує файл визначень, якщо він ще не був завантажений.

Щоб вимагати наявності функції, зателефонуйте requireз ім'ям функції в якості аргументу. requireдивиться в глобальну змінну, featuresщоб побачити, чи потрібна функція вже надана. Якщо ні, він завантажує функцію з відповідного файлу . Цей файл повинен зателефонуватиprovide на верхньому рівні, щоб додати функцію доfeatures ; якщо цього не зробити, requireсигналізує про помилку .


Приймається для цитування документів.
PythonNut

Будь ласка, включіть тут інформацію з відповіді Гілла. Або, @Gilles, введення цієї відповіді у ваше також спрацювало б.
daveloyall

13

Так, за умови, що код відповідає helm.elабо helm.elcдотримується правила, яке він повинен викликати (provide 'helm). Виклик (provide 'helm)позначає символ helmяк завантажену функцію , і це призводить до того, що другий дзвінок (require 'helm)нічого не робить.

Якщо завантажений пакет не дзвонить, provideто requireподає сигнал про помилку, а функція не позначена як завантажена, тож другий виклик (require 'helm)повторить спробу завантаження (і, як правило, повторно завершиться з тієї ж причини).


+1 Дякую за додаткову інформацію. Це вирішило мою плутанину після прочитання документів.
PythonNut
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.