我编写了一个将 alist 转换为 hash 的函数:
(defun hash-alist (alist)
"Convert association list to a hash table and return it."
(let ((my-hash (make-hash-table :test 'equal)))
(dolist (entry alist)
(if (gethash (car entry) my-hash)
(error "repeated key"))
(puthash (car entry) (cdr entry) my-hash))
my-hash))
但是当我按如下方式运行它时,为什么最后会得到nil
?
运行:
(setq a '(("a" . 2) ("b" . 1)))
(setq b (hash-alist a))
(maphash (lambda (x y) (princ (format "%s:%d " x y) t))
b)
输出:
a:2 b:1 nil
最佳答案
nil
是maphash
的返回值。仅此而已。
这是您评估maphash
sexp 的方式,导致打印返回值。
如果您查看缓冲区*Messages*
,您可能会看到类似这样的内容(取决于您如何计算表达式):
Evaluating...
a:2 b:1
Buffer `*Pp Eval Output*' is in mode `Emacs-Lisp'. For info on the mode: `C-h m'.
nil
返回值记录在 Elisp 手册的节点 Hash Access
中。它也应该(但没有)记录在文档字符串中。
关于emacs - 为什么哈希末尾有一个额外的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19826867/