Является ли использование многократного использования одного и того же символа идемпотентом?


11

Является ли requireидемпотентная? то есть делать

(require 'helm)

и

(require 'helm)
(require 'helm)

конец с тем же результатом?

Ответы:


14

Да. Из названных функций (акцент мой):

Имя элемента - это символ, обозначающий набор функций, переменных и т. Д. Файл, определяющий их, должен предоставлять функцию. Другая программа, которая использует их, может гарантировать, что они определены, требуя особенность. Это загружает файл определений, если он еще не был загружен.

Чтобы требовать наличия функции, вызовите requireее имя в качестве аргумента. requireищет в глобальной переменной, featuresчтобы увидеть, была ли уже предоставлена ​​нужная функция. Если нет, он загружает функцию из соответствующего файла . Этот файл должен вызыватьсяprovide на верхнем уровне, чтобы добавить функциюfeatures ; если это не удается, requireсигнализирует об ошибке .


Принято для цитирования документов.
PythonNut

Пожалуйста, включите информацию из ответа Жиля здесь. Или, @Gilles, тоже подойдет этот ответ в ваш.
Давелоял

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.