为什么分配给变量常量更新

p0d*_*eje 3 ruby constants

为什么当我将常量赋给变量并更新它时,常量会更新为?它是预期的行为还是错误?

ruby-1.9.3-p0 :001 > A = { :test => '123' }
 => {:test=>"123"} 
ruby-1.9.3-p0 :002 > b = A
 => {:test=>"123"} 
ruby-1.9.3-p0 :003 > b[:test] = '456'
 => "456" 
ruby-1.9.3-p0 :004 > A
 => {:test=>"456"} 
Run Code Online (Sandbox Code Playgroud)

Chu*_*uck 8

这是预期的行为,但为什么并不总是显而易见的.这是Ruby等语言中非常重要的区别.这里有三件事:

  1. 常数 A

  2. 变量 b

  3. 哈希 { :test => '123' }

前两个是两种变量.第三个是一个对象.变量和对象之间的区别至关重要.变量只是对象.将同一对象分配给两个变量时,它们都引用同一个对象.只创建了一个对象,因此当您更改它时,两个变量都会引用已更改的对象.