ruby - 哈希似乎是通过引用传递的:Ruby
问题描述
我知道标题是模棱两可的,所以让我们看看下面的例子。我有一个 Hash 命名sh
,然后我分配sh
给一个新变量su
,之后我正在修改sh
,但su
也得到修改。我想保留su
原创内容。
irb(main):001:0> sh = {"name"=>"shan", "age"=>"33" , "sex"=>"male"}
=> {"name"=>"shan", "age"=>"33", "sex"=>"male"}
irb(main):002:0> su = sh
=> {"name"=>"shan", "age"=>"33", "sex"=>"male"}
irb(main):003:0> su
=> {"name"=>"shan", "age"=>"33", "sex"=>"male"}
irb(main):005:0> sh.delete("sex")
=> "male"
irb(main):006:0> sh
=> {"name"=>"shan", "age"=>"33"} => ok here
irb(main):007:0> su
=> {"name"=>"shan", "age"=>"33"} => ??
irb(main):010:0> sh["city"] = "Bangalore" => New example
=> "Bangalore"
irb(main):011:0> sh
=> {"name"=>"shan", "age"=>"33", "city"=>"Bangalore"} => ok
irb(main):012:0> su
=> {"name"=>"shan", "age"=>"33", "city"=>"Bangalore"} => ??
解决方案
clone 方法是 Ruby 标准的、内置的浅拷贝方法:
su = sh.clone
备注:上述解决方案仅适用于非嵌套哈希。在嵌套散列的情况下,您需要编组
su = Marshal.load(Marshal.dump(sh))
推荐阅读
- vtk - 如何将世界坐标转换为VTK中的视图坐标
- flutter - 如何在颤动中启用耳机而不是扬声器
- amazon-web-services - 在 Amazon Linux 上将 Apache 更新到版本 2.4.50
- rust - rust 项目构建中未解决的导入“crate::sys”
- javascript - 使用 react-router-dom 重新加载页面后如何防止在公共和私有路由之间切换
- mysql - 按状态和父级对相关实体进行分组
- android - 下载完成手机震动
- fortran - 如何使用位置索引提取 Fortran 字符串数组的子字符串?
- azure - Azure 在自动缩放 AppServices 时使用什么算法?
- python - ValueError:在序号编码期间转换期间在第 0 列中发现未知类别 [31.0]