Ini menyebabkan kesalahan
(cl-destructuring-bind
(&key a b)
'(:a "foo" :b 13 :c "bar")
(list a b))
karena :ckunci / nilai tidak ditangani dalam kecocokan pola.
Seringkali saya mendapati diri saya ingin mengekstrak beberapa subset kunci / nilai dari sebuah plist, tetapi cl-destructuring-bindtidak sesuai karena keterbatasan ini.
Apakah ada cara untuk cl-destructuring-bindmengabaikan kunci yang tidak cocok di EXPR? Saya tidak yakin apa yang seharusnya menjadi perilaku umum lumpuh resmi di sini, apakah kesalahan dalam spesifikasi?
Perhatikan bahwa pustaka dasbor memiliki beberapa dukungan untuk penghancuran serupa dengan -let, tetapi itu membutuhkan beberapa pelat untuk menetapkan simbol untuk setiap kunci. Sebuah memperbaiki telah diusulkan
Memperhatikan jawaban Stefan, ini bekerja dengan baik:
(defmacro plist-bind (args expr &rest body)
"`destructuring-bind' without the boilerplate for plists."
`(cl-destructuring-bind
(&key ,@args &allow-other-keys)
,expr
,@body))
(plist-bind
(a b)
'(:a "foo" :b 13 :c "bar")
(list a b)) => ("foo" 13)