Bagaimana cara saya menghindari peringatan byte-compiler Unused lexical variable
dalam fungsi yang didefinisikan menggunakan makro untuk memperluas defun
?
Misalnya, makro defun-rcirc-command
dalam
rcirc.el
menggunakan target
variabel yang tidak digunakan oleh beberapa pemanggilan.
Dalam Common Lisp saya dapat menggunakan
ignorable
deklarasi: (declare (ignorable target))
.
Solusi buruk:
Tambahkan sesuatu seperti
(setq target target)
ke semua penggunadefun-rcirc-command
yang tidak menggunakantarget
: yang membutuhkan banyak modifikasi makro.Awalan variabel yang dapat diabaikan dengan garis bawah -
_target
- tidak membantu karena_
berartiignore
, bukanignorable
, yaitu, ketika digunakan, saya dapatkanvariable '_target' not left unused
.
compilation
warning
sds
sumber
sumber
(ignore VAR)
argumen defun sebelum ekspansi, @ body yang mungkin akan membungkam kesalahan.Jawaban:
Cara saya melakukan itu sejauh ini adalah dengan menambahkan panggilan bentuk
Panggilan fungsi ini akan dioptimalkan jauh, tetapi sebelum itu kompiler masih akan menghitungnya sebagai penggunaan, sehingga peringatan "tidak digunakan" tidak akan terpicu.
sumber
Melihat kode, tampak bahwa target tidak dimaksudkan untuk menjadi variabel global tetapi diteruskan ke fungsi yang dibuat ketika dipanggil. Jika itu masalahnya, lebih baik untuk membuatnya sebagai simbol lokal ke makro. Contoh sederhana makro yang membuat fungsi yang menerima argumen dan menambahkan 10 ke dalamnya:
Panggilan
akan menghasilkan fungsi bernama hamster yang menerima satu argumen.
Maka Anda bisa menelepon
dan itu akan kembali
15
.Caranya adalah dengan membuat simbol baru yang akan bertindak sebagai argumen untuk fungsi baru.
EDIT:
Saya selalu melihat bahwa jika Anda merujuk pada simbol yang dihasilkan dalam ekspresi tubuh yang diteruskan, Anda memasukkan nama dalam panggilan seperti:
Yang kemudian mengubah panggilan menjadi:
dimana
yang mengembalikan
30
dankembali
40
.Diakui, ini selalu mengganggu saya ketika saya menulis macro dengan cara ini sampai saya melihat penggunaan di mana muncul parameter yang dinyatakan dan kemudian digunakan.
sumber
target
. TKI, saran bagus Anda tidak berlaku dalam kasus khusus ini.