我在ielm中评估了以下elisp代码:
(setq foo-hash (make-hash-table))
(puthash "location" "house" foo-hash)
(defun foo-start ()
(interactive)
(message (gethash "location" foo-hash)))
但是,当我运行(foo-start)
或(gethash "location" foo-hash)
时,我只会回复nil
。在ielm中仅输入foo-hash
:#s(hash-table size 65 test eql rehash-size 1.5 rehash-threshold 0.8 data ("location" "house"))
这是一个错误还是我做错了什么?
Emacs版本:24.0.95.1
答案 0 :(得分:11)
elisp中的哈希表默认使用eql
进行比较。字符串不会与eql
相等,除非它们是同一个对象。您可能希望使用equal
,它会比较字符串的内容。使用以下命令创建哈希表:
(make-hash-table :test 'equal)