2014-07-06 168 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