Ini menyebabkan kesalahan
(cl-destructuring-bind
(&key a b)
'(:a "foo" :b 13 :c "bar")
(list a b))
karena :c
kunci / nilai tidak ditangani dalam kecocokan pola.
Seringkali saya mendapati diri saya ingin mengekstrak beberapa subset kunci / nilai dari sebuah plist, tetapi cl-destructuring-bind
tidak sesuai karena keterbatasan ini.
Apakah ada cara untuk cl-destructuring-bind
mengabaikan 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)