a = 1 puts "a = #{a}; a.object_id: #{a.object_id}" # =》 a = 1; a.object_id: 3 def abc(a) puts "a = #{a}; a.object_id: #{a.object_id}" # =》 a = 1; a.object_id: 3 a = 2 puts "a = #{a}; a.object_id: #{a.object_id}" # =》 a = 2; a.object_id: 5 end abc(a) puts "a = #{a}; a.object_id: #{a.object_id}" # =》 a = 1; a.object_id: 3
?在ruby的一个方法内,如上图abc方法,变量a作为参数传进来,这时在方法abc内部,参数a代表着一个指向变量a的指针,所以她的object_id是3,但是当赋值操作产生的时候,参数a由一个指向其他变量的指针类型,变成了一个int类型的变量。所以这时a的object_id为5.当方法运行完成后,参数a的生命周期结束。在方法外,变量a并没有消失,值也没有变。
原文:http://wudixiaotie.iteye.com/blog/2155117