我意识到哈希中的符号键是不可变的,而字符串键是可变的,但是我仍然不明白为什么这会导致这些结果...
[5] pry(main)> a[:b] = "c"
=> "c"
[6] pry(main)> a["b"]
=> nil
[7] pry(main)> a[:b]
=> "c"
"a[:b]"
不会变成引擎盖下的a["b"]
吗?
[不,不应该,:b
是与'b'
不同的对象,因此,除非a
是具有不同访问权限的哈希,否则a[:b]
最有可能返回与a['b']
不同的结果。
BTW Ruby实际上是动态类型的,它也是非常强类型的-隐式类型转换在这里很少发生。
根据文档:
。如果您要查找Element Reference-检索与键对应的值对象宾语。如果找不到,则返回默认值(请参见Hash :: new详细信息)。>
检索与键对象相对应的值对象
"b"
,则"b"
与:b
不同,因此就是错误。