If MAP is a list, `equal' is used to lookup KEY."
(map--dispatch map
- :list (or (cdr (assoc key map)) default)
+ :list (map--elt-list map key default)
:hash-table (gethash key map default)
:array (map--elt-array map key default)))
(setq index (1+ index))))
map)))
+(defun map--elt-list (map key &optional default)
+ "Return the element of the list MAP at the index KEY.
+If KEY is not found, return DEFAULT which defaults to nil."
+ (let ((pair (assoc key map)))
+ (if pair
+ (cdr (assoc key map))
+ default)))
+
(defun map--elt-array (map key &optional default)
- "Return the element of the arary MAP at the index KEY, or DEFAULT if nil."
+ "Return the element of the array MAP at the index KEY.
+If KEY is not found, return DEFAULT which defaults to nil."
(let ((len (seq-length map)))
(or (and (>= key 0)
(<= key len)
(with-maps-do map
(assert (= 5 (map-elt map 7 5)))))
+(ert-deftest test-map-elt-with-nil-value ()
+ (assert (null (map-elt '((a . 1)
+ (b))
+ 'b
+ '2))))
+
(ert-deftest test-map-put ()
(with-maps-do map
(map-put map 2 'hello)