【问题标题】:why removing key from hash ,removes it also from another hash?为什么从散列中删除密钥,也会从另一个散列中删除它?
【发布时间】:2014-08-27 00:48:39
【问题描述】:

为什么从散列中删除键,也会从另一个散列中删除?

msg = { key1: "XXX",key2: 'xxx' }
send_msg(msg)
send_msg(msg)

def send_message(msg)
  p msg
  msg.delete(:key1)
end

输出:

=> { key1: "XXX",key2: 'xxx' }
=> { key2: 'xxx' }

还有:

 irb(main):023:0> a = { key1: "XXX",key2: 'xxx' }
    => {:key1=>"XXX", :key2=>"xxx"}
    irb(main):024:0> b=a
    => {:key1=>"XXX", :key2=>"xxx"}
    irb(main):025:0> a.delete(:key1)
    => "XXX"
    irb(main):026:0> a
    => {:key2=>"xxx"}
    irb(main):027:0> b
    => {:key2=>"xxx"}

是参考吗?

【问题讨论】:

  • 是的,它是一个参考

标签: ruby-on-rails hash key


【解决方案1】:

因为 #delete 会改变原始的 msg 哈希值。如果您希望 msg 保持原样,请将其 duplicate 传递给 send_msg

msg = { key1: "XXX",key2: 'xxx' }
send_msg(msg.dup)
send_msg(msg.dup)

def send_message(msg)
  p msg
  msg.delete(:key1)
end

【讨论】:

  • 谢谢!我不知道dup 选项。
猜你喜欢
  • 2019-02-24
  • 2016-11-09
  • 2023-03-24
  • 2011-02-03
  • 2017-02-13
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多