Tag: mutable

为什么哈希冻结的字符串键?

根据规范 ,用作哈希键的字符串被复制和冻结。 其他可变对象似乎没有这么特别的考虑。 例如,使用数组键,可以使用以下内容。 a = [0] h = {a => :a} h.keys.first[0] = 1 h # => {[1] => :a} h[[1]] # => nil h.rehash h[[1]] # => :a 另一方面,使用字符串键不能完成类似的操作。 s = “a” h = {s => :s} h.keys.first.upcase! # => RuntimeError: can’t modify frozen String 当涉及到散列键时,为什么字符串被设计为与其他可变对象不同? 是否存在此规范变得有用的用例? 该规范还有哪些其他后果? 我实际上有一个用例,其中没有关于字符串的这种特殊规范可能是有用的。 也就是说,我用yaml gem读取了一个描述哈希的手动编写的YAML文件。 键可能是字符串,我想在原始YAML文件中允许不区分大小写。 当我读取文件时,我可能会得到这样的哈希: […]