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 .elcfile! Ho scoperto che cl-eval-whenhanno una semantica corretta (in base al nome).
Normalmente non abbiamo bisogno di requirecome file del sito epackage.el
Ad esempio, voglio compilare byte my .emacsche 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-compilenome 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 .emacsfile 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 requiresolo di avere successo con la compilazione di byte con l'espansione delle macro.
w3m-DEPENDENT-CODEda una mancanzaw3m-util.