ruby - 重新分配的哈希更改了原始哈希
问题描述
为什么变量会a
发生变化,我该如何防止它?
a = [] # => []
b = a # => []
b << :hello # => [:hello]
p a # => [:hello]
# >> [:hello]
我看到使用克隆的响应,并想知道为什么下面的工作以及在哪些情况下需要和不需要 .clone
a = "string" # => "string"
b =a # => "string"
b = "changed" # => "changed"
a # => "string"
解决方案
为什么变量会
a
发生变化,我该如何防止它?a = [] # => [] b = a # => [] b << :hello # => [:hello] p a # => [:hello]
# >> [:hello]
变量a
没有改变。可以更改变量的唯一方法Binding#local_variable_set
是分配给它(忽略像 一样的反射),您没有这样做。因此,a
不改变。
两者都引用并更改的对象。但是改变对象和改变变量是完全不同的两件事。 a
b
我看到使用克隆的响应,并想知道为什么下面的工作以及在哪些情况下需要和不需要 .clone
a = "string" # => "string" b =a # => "string" b = "changed" # => "changed" a # => "string"
这是有效的,因为您从不更改对象。你改变变量。
推荐阅读
- flutter - 如果服务器无法访问,如何显示错误
- node.js - 表达式中未使用的表达式属性名称中提供的值:键:{#loan}
- node.js - 如何检查 JSON 发布请求是否包含某个键并更新 Node.js 中的 JSON 文件
- python - SQL Server 驱动程序 Python 在服务器上无法正常运行
- reactjs - React 测试库:如何测试包含 useLocation() 的组件?
- c# - 当我在 IIS 上发布时,Selenium API 不起作用
- java - 当用户按下回车键时停止程序
- reactjs - React - 即使定义了 defaultProps,TypeScript 也会将 undefined 添加到 prop
- windows - 以管理员身份运行 Bat 文件/ Cmd 文件 Windows 10
- c# - Discord.Net 服务器请求重新连接导致音乐播放器出现问题