Відповіді:
Так. З іменованих функцій (моє наголос):
Назва функції - це символ, який позначає сукупність функцій, змінних тощо. Файл, який їх визначає, повинен містити функцію. Інша програма, яка їх використовує, може гарантувати, що вони визначені, вимагаючи функції. Це завантажує файл визначень, якщо він ще не був завантажений.
Щоб вимагати наявності функції, зателефонуйте
requireз ім'ям функції в якості аргументу.requireдивиться в глобальну змінну,featuresщоб побачити, чи потрібна функція вже надана. Якщо ні, він завантажує функцію з відповідного файлу . Цей файл повинен зателефонуватиprovideна верхньому рівні, щоб додати функцію доfeatures; якщо цього не зробити,requireсигналізує про помилку .
Так, за умови, що код відповідає helm.elабо helm.elcдотримується правила, яке він повинен викликати (provide 'helm). Виклик (provide 'helm)позначає символ helmяк завантажену функцію , і це призводить до того, що другий дзвінок (require 'helm)нічого не робить.
Якщо завантажений пакет не дзвонить, provideто requireподає сигнал про помилку, а функція не позначена як завантажена, тож другий виклик (require 'helm)повторить спробу завантаження (і, як правило, повторно завершиться з тієї ж причини).