elisp: Repeated Loading

 
 15.6 Repeated Loading
 =====================
 
 You can load a given file more than once in an Emacs session.  For
 example, after you have rewritten and reinstalled a function definition
 by editing it in a buffer, you may wish to return to the original
 version; you can do this by reloading the file it came from.
 
    When you load or reload files, bear in mind that the ‘load’ and
 ‘load-library’ functions automatically load a byte-compiled file rather
 than a non-compiled file of similar name.  If you rewrite a file that
 you intend to save and reinstall, you need to byte-compile the new
 version; otherwise Emacs will load the older, byte-compiled file instead
 of your newer, non-compiled file!  If that happens, the message
 displayed when loading the file includes, ‘(compiled; note, source is
 newer)’, to remind you to recompile it.
 
    When writing the forms in a Lisp library file, keep in mind that the
 file might be loaded more than once.  For example, think about whether
 each variable should be reinitialized when you reload the library;
 ‘defvar’ does not change the value if the variable is already
 initialized.  (SeeDefining Variables.)
 
    The simplest way to add an element to an alist is like this:
 
      (push '(leif-mode " Leif") minor-mode-alist)
 
 But this would add multiple elements if the library is reloaded.  To
 avoid the problem, use ‘add-to-list’ (SeeList Variables):
 
      (add-to-list 'minor-mode-alist '(leif-mode " Leif"))
 
    Occasionally you will want to test explicitly whether a library has
 already been loaded.  If the library uses ‘provide’ to provide a named
 feature, you can use ‘featurep’ earlier in the file to test whether the
 ‘provide’ call has been executed before (SeeNamed Features).
 Alternatively, you could use something like this:
 
      (defvar foo-was-loaded nil)
 
      (unless foo-was-loaded
        EXECUTE-FIRST-TIME-ONLY
        (setq foo-was-loaded t))