議論が何であれ、それはまったく何もしていないようです。また、バイトコンパイルの警告にはまったく影響しません。その説明に従って使用した場合。それを使用する方法の例はありますか?
たとえば、次のコードです。
(defmacro deflocal (var &rest body)
(let ((symb var)
(val (car body))
(doc (cadr body)))
`(progn
(let ((byte-compile-warnings nil))
;; (byte-compile-disable-warning 'make-local)
(set (make-local-variable ',symb) ,val)
(put ',symb 'variable-documentation ,doc)
;; (byte-compile-enable-warning 'make-local)
))))
やりたいことは何でもできbyte-compile-warnings
、コンパイラの出力にはまったく影響しません(自由変数への割り当てに関する警告が引き続き表示されます。
編集:
これは、上記の説明では不透明だったからです。これが私が使いたくない理由ですdefvar
。Emacs外のプログラムと通信するための一種のインタラクティブシェルを開始するインタラクティブ関数があります。このシェルは、ユーザーが直接起動することも、いくつかの異なるメジャー モードに入るとき、またはコンパイルや構文チェックなどの他のタスクを実行するときに間接的に起動することもできます。システムはかなり複雑です。
私は何度も、特定の関数が最終的に不要なバッファに変数を設定する可能性があることに遭遇しました。たとえば、コンパイル フックが、接続オブジェクトを所有するバッファーで呼び出されると想定する関数を呼び出す場合。接続が失敗する可能性があるため、何らかの理由で接続が失敗したことを検出すると、システムは自動的に接続を復元しようとします (残念ながら、私が接続しなければならない他のプログラムは非常に不安定であり、その通信機能は十分に実装されていません)。 . したがって、たとえば、flymake プロセスが接続を復元する必要があることに突然気付いた場合、その時点で flymake があったバッファに接続を作成します。同様に、コンパイル モード バッファー、完了バッファー、ヘルプ バッファーなど。これらの文脈の変化の後を追うことは非常に困難です。
これで、接続オブジェクトを参照する変数を他のバッファーが誤って宣言したり、エラーが発生したりすることがないと確信できれば、安全であり、問題が発生したときに簡単にデバッグしてトラブルシューティングを行うことができます。しかし、一度使っdefvar
てみると、ルージュの複製プロセスがいくつか作成されていることに気付き、誰がそれを行ったのかまったくわかりません。