Ungkapan umum untuk mengatasi ekspansi makro atau menyelesaikan peringatan tentang variabel yang tidak ditentukan selama byte-compilation:
(eval-when-compile
(require 'cl-lib))
Tapi ini require ...dikompilasi menjadi .elcfile! Saya menemukan yang cl-eval-whenmemiliki semantik yang tepat (sesuai nama).
Biasanya kita tidak memerlukan requirefile situs danpackage.el
Misalnya saya ingin byte-compile saya .emacsyang menggunakan beberapa makro eksternal, tetapi diam-diam melewati jika tidak ada paket seperti itu:
(cl-eval-when 'compile
(condition-case err
(require 'w3m-util)
(error (byte-compile-warn "Failed by: %S" err))))
(w3m-util-DEPENDENT-CODE ...)
Cara lain untuk melakukan ini adalah:
(ignore-error
(require 'w3m-util)
(w3m-util-DEPENDENT-CODE ...))
Tapi sekarang kita bukan bentuk tingkat atas ...
Apakah saya benar mengisi eval-when-compilenama itu melakukan sesuatu yang tidak diharapkan dari namanya?
(when (require 'w3m-util nil t) (w3m-util-DEPENDENT-CODE...))
(when (require 'w3m-util nil t) ...)adalah ungkapan yang bagus! Tapi saya mencoba membuat .emacsfile yang sempurna , bukan perpustakaan. Jadi, ingatlah untuk menunda pemuatan kode (atas permintaan) dengan bantuan pemuatan otomatis. Untuk alasan ini, saya banyak menggunakan eval-after-load, meminta requirehanya perlu membuat sukses byte-kompilasi dengan ekspansi makro.
w3m-DEPENDENT-CODEdari yang hilangw3m-util.