2014-07-06 135 views
0

为什么从密钥中删除密钥,将密钥从哈希中删除?为什么从密钥中删除密钥,将密钥从另一个密码中删除?

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"} 

它是一个参考?

+0

是的,它是一个参考 – emaillenin

回答

1

因为#delete改变了原始msg散列。如果你想msg维持不坠,通过它复制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 
+0

谢谢!我不知道'dup'选项。 – user2503775