これによりエラーが発生します
(cl-destructuring-bind
(&key a b)
'(:a "foo" :b 13 :c "bar")
(list a b))
:c
キー/値はパターン一致で処理されないためです。
多くの場合、plistからキー/値のサブセットを抽出したいと思ってcl-destructuring-bind
いますが、この制限のため適切ではありません。
cl-destructuring-bind
EXPRで一致しないキーを単に無視する方法はありますか?公式の一般的なlispの動作がどうなっているのかわかりませんが、仕様のエラーですか?
ダッシュライブラリは、を使用した同様のデストラチャをサポートしています-let
が、各キーにシンボルを割り当てるためのボイラープレートが必要です。修正が提案されています
ステファンの答えを考慮に入れると、これはうまくいきます:
(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)