Minor improvement in map-elt.
* lisp/emacs-lisp/map.el (map-elt): Do not use `ignore-errors' when doing a lookup in arrays, but check the boundaries of the array instead. * test/automated/map-tests.el: Adds a test for `map-elt' with arrays and a negative integer as key.
This commit is contained in:
parent
89baf16332
commit
f37e265ea9
2 changed files with 12 additions and 2 deletions
|
@ -48,11 +48,11 @@
|
|||
"Perform a lookup in MAP of KEY and return its associated value.
|
||||
If KEY is not found, return DEFAULT which defaults to nil.
|
||||
|
||||
If MAP is a list, `assoc' is used to lookup KEY."
|
||||
If MAP is a list, `equal' is used to lookup KEY."
|
||||
(map--dispatch map
|
||||
:list (or (cdr (assoc key map)) default)
|
||||
:hash-table (gethash key map default)
|
||||
:array (or (ignore-errors (elt map key)) default)))
|
||||
:array (map--elt-array map key default)))
|
||||
|
||||
(defmacro map-put (map key value)
|
||||
"In MAP, associate KEY with VALUE and return MAP.
|
||||
|
@ -252,6 +252,15 @@ form.
|
|||
(setq index (1+ index))))
|
||||
map)))
|
||||
|
||||
(defun map--elt-array (map key &optional default)
|
||||
"Return the element of the arary MAP at the index KEY, or DEFAULT if nil."
|
||||
(let ((len (seq-length map)))
|
||||
(or (and (>= key 0)
|
||||
(<= key len)
|
||||
(seq-elt map key))
|
||||
default)))
|
||||
|
||||
|
||||
(defun map--delete-alist (map key)
|
||||
"Return MAP with KEY removed."
|
||||
(seq-remove (lambda (pair)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue