マクロ展開を回避する、またはバイトコンパイル中に未定義の変数に関する警告を解決するための一般的なイディオム:
(eval-when-compile
(require 'cl-lib))
しかし、これrequire ...は.elcファイルにコンパイルされました!cl-eval-when(名前によると)適切なセマンティックスがあることがわかりました。
通常require、サイトファイルやpackage.el
たとえば.emacs、いくつかの外部マクロを使用して自分をバイトコンパイルしたいのですが、そのようなパッケージがない場合は黙ってパススルーします。
(cl-eval-when 'compile
(condition-case err
(require 'w3m-util)
(error (byte-compile-warn "Failed by: %S" err))))
(w3m-util-DEPENDENT-CODE ...)
これを行う別の方法は次のとおりです。
(ignore-error
(require 'w3m-util)
(w3m-util-DEPENDENT-CODE ...))
しかし、今はトップレベルのフォームではありません...
そのeval-when-compile名前を適切に入力して、その名前から予期されないことをしますか?
(when (require 'w3m-util nil t) (w3m-util-DEPENDENT-CODE...))
(when (require 'w3m-util nil t) ...)いいイディオムです!しかし、私.emacsはライブラリーではなく、完璧なファイルを作ろうとしています。したがって、自動ロードの助けを借りて、遅延した(要求に応じて)コードのロードを念頭に置いてください。このため、私はを広く使用していますがeval-after-load、requireマクロ展開でバイトコンパイルを成功させるには、尋ねる必要があります。
w3m-DEPENDENT-CODE行方不明から保護しませんw3m-util。