Cisp, skema, clojure programmer berpengalaman membuat pindah ke elisp dari python untuk mengotomatisasi rutin, setiap hari, tugas-tugas dasar: Saya mendapat kejutan besar dari yang berikut di ielm
ELISP> (setq h2 (make-hash-table))
#s(hash-table size 65 test eql rehash-size 1.5 rehash-threshold 0.8 data ())
ELISP> (puthash "a" 1 h2)
1 (#o1, #x1, ?\C-a)
ELISP> (gethash "a" h2)
nil
Hah? Kunci dan nilai tampaknya ada:
ELISP> h2
#s(hash-table size 65 test eql rehash-size 1.5 rehash-threshold 0.8 data ("a" 1))
/ Menampar dahi. Saya pasti kehilangan sesuatu yang sangat jelas. Info mengatakan:
-- Function: gethash key table &optional default
This function looks up KEY in TABLE, and returns its associated
VALUE—or DEFAULT, if KEY has no association in TABLE.
Bagus. Mari kita lihat apakah kita bisa gethash
mengembalikan apa pun selain nil
:
ELISP> (gethash "a" h2 'fubar)
fubar
Wow. Ok, saya jauh lebih bodoh dari yang saya kira. Apa yang saya lakukan salah?
:test
parameter dalam contoh Anda ...string-equal
mungkin memiliki beberapa kelebihan dibandingkanequal
jika saya tahu hash-table saya hanya memiliki string sebagai kunci. Saya tidak yakin mengapa elisp memiliki keduanyastring-equal
danequal
, karenaequal
dapat digunakan di mana saja yangstring-equal
dapat digunakan modulo fakta yangstring-equal
melempar kesalahan ketik ketika Anda tidak memberikan string. Mungkin itu perilaku yang diinginkan.