目前的 -let
不能像 let-alist
那样读取嵌套列表的值,但 let-alist
用.
作为分隔符的写法也有点奇怪,不支持 string 类型的 key(例如 .a."b"
),而且不支持 alist 之外的列表。
我试着扩展了一下 -let
,实现列表(包括 alist/plist/hash)的嵌套读取,主要是想看看是否可行,更期待 dash 官方的实现。
代码略长(包含测试)就不贴了,放在 Test nested destructuring in dash let form #Emacs · GitHub
用例:
(-let [(&alist '(a "b" c) v) '((a . (("b" . ((c . 3))))))] v)
;; => (let* ((v (cdr (assoc 'c
;; (cdr (assoc "b"
;; (cdr (assoc 'a
;; '((a . (("b" . ((c . 3))))))))))))))
;; v)
;; => 3
(-let [(&alist '(a "b") v) '((a . (("b" . ((c . 3))))))] v)
;; => (let* ((v (cdr (assoc "b"
;; (cdr (assoc 'a
;; '((a . (("b" . ((c . 3))))))))))))
;; v)
;; => '((c . 3))
(-let [(&alist 'a v) '((a . (("b" . ((c . 3))))))] v)
;; => '(("b" . ((c . 3))))