我有以下愚蠢的测试代码:
#lang racket
(define vars '('g1 'g2 'g3 'g1))
(define addrs '(123 456 789 012))
(define immhs (make-immutable-hasheq empty))
(define immhs* (for/fold ([imhs immhs]) ([var (in-list vars)] [addr (in-list addrs) ]) (hash-set imhs var addr )))
immhs*
(hash-ref immhs* 'g1)
输出结果为:
'#hasheq(('g1 . 123) ('g2 . 456) ('g3 . 789) ('g1 . 12))
hash-ref: no value found for key: 'g1
为什么hash-ref
无法引用'g1
? (它也会在'g2
上失败等)
然后我使用(hash-keys immhs*)
,它返回'('g1 'g2 'g3 'g1)
,其中有'g1
;
我进一步使用(car (hash-keys immhs*))
,它返回''g1
;那么问题是为什么之前有两个引用'
?
答案 0 :(得分:2)
问题恰恰就是您看到的两个引号:x
评估绑定到x
的任何内容,'x
计算符号,''x
评估为引用形式 - 'x
。试试这个:
(define vars '(g1 g2 g3 g1))
它会起作用。