我承认我是个ruby新手(现在写rake脚本).在大多数语言中,拷贝构造函数很容易找到.半个小时的搜索没有在ruby中找到它.我想创建一个散列的副本,以便在不影响原始实例的情况下修改它.

一些预期的方法没有达到预期效果:

h0 = {  "John"=>"Adams","Thomas"=>"Jefferson","Johny"=>"Appleseed"}
h1=Hash.new(h0)
h2=h1.to_hash

与此同时,我采取了这种不雅观的变通方法

def copyhash(inputhash)
  h = Hash.new
  inputhash.each do |pair|
    h.store(pair[0], pair[1])
  end
  return h
end

推荐答案

clone方法是Ruby的标准内置方法,用于执行shallow-copy:

irb(main):003:0> h0 = {"John" => "Adams", "Thomas" => "Jefferson"}
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
irb(main):004:0> h1 = h0.clone
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
irb(main):005:0> h1["John"] = "Smith"
=> "Smith"
irb(main):006:0> h1
=> {"John"=>"Smith", "Thomas"=>"Jefferson"}
irb(main):007:0> h0
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}

请注意,该行为可能会被覆盖:

此方法可能具有特定于类的行为.如果是这样,该行为将记录在类的#initialize_copy方法下.

Ruby相关问答推荐

Ruby脚本递归地创建深度嵌套的目录

使用 Ruby,我如何访问和比较这些嵌套的数组值?

从整数中 Select 重复数字的字符串

BasicObject 的 singleton_class 的超类如何以及为什么是 Ruby 中的 Class 类?

使用正则表达式判断用户输入的开头是否正好有两个大括号

如何从 DateTime 值中删除区域?

Python 正则表达式是否等同于 Ruby 的原子分组?

Ruby 中的内联注释

each_with_object 应该如何工作?

为什么 ruby​​ 在 Windows 上这么慢?

Ruby 中的 class() 与 type()

在 YAML 变量中包含 jekyll / liquid 模板数据?

复制文件,在 Ruby 中根据需要创建目录

按键对哈希进行分组并对值求和

从字符串中删除所有特殊字符 - ruby

在 OSX 10.10 Yosemite 上安装 Nokogiri

带有添加和删除参考的 Rails 迁移

何时在 Ruby 中使用 `require`、`load` 或 `autoload`?

Ruby中的urldecode?

如何计算 Ruby 数组中的重复元素