From: Robert Klemme Date: 2008-09-27T23:14:36+09:00 Subject: Re: Does array's each-block destroies outer objects ? On 27.09.2008 11:14, Sebastian Hungerecker wrote: > w wg wrote: >> After execute the block , it looks like that ruby destroied the former >> 'x' object, There is no object destroyed. The variable x is made to point to another object. If there are no more references to the object pointed to by x before it can be garbage collected at any point in time after x has been made to point to another instance. > the 'x' object has object_id 4 now, which is same as >> a[4].object_id. > > Yes, if you do {|foo|...} and you have a local variable foo outside the block, > then the outer foo will be replaced by the value that is yielded to the block. > This is a property of blocks in 1.8, not of each in particular. This behaviour > will no longer be present in 1.9. > >> If so , does it mean that I must choose another variable name in >> array's each block to keep the 'x' object alive ? > > Yes. Just to throw in the keyword for the concept involved to help in further research of the matter: the concept is called "scoping" - the scoping rules for a programming language determine which variables are visible in which program artifacts (blocks, methods...) and especially what happens to variables with identical names. Kind regards robert