Idioma comune per aggirare l'espansione di macro o risolvere avvisi relativi a variabili non definite durante la compilazione di byte:
(eval-when-compile
(require 'cl-lib))
Ma questo è stato require ...
compilato in un .elc
file! Ho scoperto che cl-eval-when
hanno una semantica corretta (in base al nome).
Normalmente non abbiamo bisogno di require
come file del sito epackage.el
Ad esempio, voglio compilare byte my .emacs
che utilizza alcune macro esterne, ma passano silenziosamente se non ci sono tali pacchetti:
(cl-eval-when 'compile
(condition-case err
(require 'w3m-util)
(error (byte-compile-warn "Failed by: %S" err))))
(w3m-util-DEPENDENT-CODE ...)
Un altro modo per farlo è:
(ignore-error
(require 'w3m-util)
(w3m-util-DEPENDENT-CODE ...))
Ma ora non siamo un modulo di livello superiore ...
Devo riempire correttamente quel eval-when-compile
nome per fare qualcosa che non è previsto dal suo nome?
(when (require 'w3m-util nil t) (w3m-util-DEPENDENT-CODE...))
(when (require 'w3m-util nil t) ...)
è un bel linguaggio! Ma provo a creare un .emacs
file perfetto , non una libreria. Quindi, ricorda il caricamento ritardato (su richiesta) del codice con l'aiuto del caricamento automatico. Per questo motivo che utilizzo ampiamente eval-after-load
, mi è stato chiesto require
solo di avere successo con la compilazione di byte con l'espansione delle macro.
w3m-DEPENDENT-CODE
da una mancanzaw3m-util
.