Saya bersenang-senang menambahkan beberapa saran ke fungsi:
(advice-add 'executable-find :around
(lambda (f &rest args)
(apply g args)))
;;; ^
Aduh, salah ketik. Memperbaikinya dan mengevaluasi kode di atas lagi. Tapi sekarang saya memiliki keduanya, saran "diperbaiki" dan "rusak" di sekitar fungsi itu.
Bagaimana saya menyingkirkan ini? Mengingat bahwa advice-remove
perlu objek fungsi atau saran sekitar (yang kosong di sini)?
(Jelas saya bisa berhenti dan memulai kembali, tetapi ada cara lain, bukan?)
eq
dengan yang sebelumnya, (2) saran-hapus akan membandingkan fungsi yang Anda berikan ke saran sampai menemukan salah satunya adalaheq
untuk itu dan menghapus itu, (3) bahkan jika saran-hapus menggunakan tes yang berbeda, sepertiequal
, itu masih tidak akan berhasil, karena evaluasi yang berbeda dari bentuk lambda tidak akanequal
saling. Ternyata (1) benar, tetapi (2) dan (3) salah: penggunaan saran-hapusequal
, dan mengevaluasi yang samalambda
dua kali menghasilkanequal
hasil!Ada
advice-mapc
, yang mari kita mengulangi semua saran dari beberapa fungsi, menerapkan fungsi yang diberikan untuk masing-masing. Dengan itu, mudah untuk menghapus semua saran:Ini dapat diperluas untuk menghapus hanya saran yang tidak memiliki
name
properti dengan melihat padaprops
argumen kedua ( ) (yang merupakan daftar) untuk mereka yang tidak memiliki sesuatu yang terkait dengan kunciname
.sumber
name
menghapus membuat lebih mudah.Berikut beberapa kode untuk membantu melakukan hal itu, secara interaktif.
Ini mendefinisikan dua fungsi. Fungsi pertama mendapatkan daftar semua saran pada simbol yang diberikan, fungsi kedua secara interaktif meminta simbol dan saran tentang simbol itu, kemudian menghapus yang terakhir dari yang sebelumnya. Karena ini semua terjadi dengan selesai, lebih mudah (bagi saya) daripada menyalin menempelkan ekspresi lambda.
sumber