![]() |
1
4
当你有一个变量指向一个对象时,你实际上只是引用了这个对象。如果a和b都指向哈希{1=>3,“foo”=>!54},则更改a或b将更改另一个。 但是,您可以使用两种方法的组合来制作您想要的内容。 哈希的默认值:
这将为未使用的值提供默认值0:
然后,您可以添加计数:
做完后打电话
并且您的哈希将被重置,但新的访问权限仍将默认为0。 请注意,如果将默认值设置为数字以外的对象类型,则由于上述整个引用问题,您可能能够更改内容。
为了解决这个问题,您可以将一个块传递给您的hash:
这样每次都会在关键点创建一个新对象,因此对其中一个对象的更改不会产生涟漪:
|
![]() |
2
4
正如其他人提到的,你必须使用 clone 。您的任务应该如下所示:
|
![]() |
3
1
您正在修改一个散列。 两个变量都引用相同的散列。当您更改散列中的一个项时,两个引用都会反映出该更改——因为它是相同的散列指令。 也许你想先复制哈希?如果你这样做了,并且你有一个复杂对象的散列,你还需要研究浅拷贝和深度拷贝/克隆。 |
![]() |
4
1
您需要使用克隆来制作副本。 看见 https://stackoverflow.com/a/4157438/1118101 否则,您只创建了两个指向同一哈希的“指针”,而不是复制内容。 然后使用replace将克隆的内容复制回现有的哈希中。 |
![]() |
Stilian · 存储库设置中没有Github页面部分 2 年前 |
![]() |
Kellen · 查看$卷展栏功能列表 2 年前 |
![]() |
Akshit Thakur Ak · 我怎样才能把铁轨停下来? 2 年前 |
![]() |
johncssjs · 将数组转换为每个元素的嵌套哈希 2 年前 |
![]() |
solidsnake99 · Rails db:如何绕过验证 2 年前 |