如果我们使用字符串作为Hash键,Ruby需要评估字符串并查看它的内容(并在其上计算散列函数)并将结果与已存储在Hash中的键的(散列)值进行比较.
如果我们使用一个符号作为Hash键,它隐含它是不可变的,所以Ruby基本上只是将object-id的(哈希函数)与已经存储在其中的键的(哈希)对象-id进行比较.哈希. (快多了).
但事情是在Rails params中,它是HashWithIndifferentAccess的实例,如果我们写params [:some_key]它将:some_key转换为’some_key’然后它会尝试在params hash中查找键.
line 159
def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end
因此,如果在Hash中将String作为键,查找速度很慢,为什么HashWithIndifferentAccess会将符号键转换为字符串.