Hello there!
I have this program:
- -------------------------------------------------------------------------
class Car
attr_reader :number
def initialize(n)
@number=n
puts "Creating car no. #{n}:#{object_id}"
end
def to_s
"Car no. #{@number}"
end
end
def makeCar(n)
c = Car.new(n)
end
def listCars
puts "\nListing cars:"
ObjectSpace.each_object(Car) {|o| puts "#{o}:#{o.object_id}"}
puts
end
c1 = makeCar(1)
makeCar(2)
makeCar(3)
listCars()
makeCar(4)
makeCar(5)
listCars();
puts "Firing gc."
GC.start
listCars();
- -------------------------------------------------------------------------
When I run, I get:
Creating car no. 1:-604870360
Creating car no. 2:-604870370
Creating car no. 3:-604870410
Listing cars:
Car no. 3:-604870410
Car no. 2:-604870370
Car no. 1:-604870360
Creating car no. 4:-604870500
Creating car no. 5:-604870490
Listing cars:
Car no. 4:-604870500
Car no. 5:-604870490
Car no. 3:-604870410
Car no. 2:-604870370
Car no. 1:-604870360
Firing gc.
Listing cars:
Car no. 4:-604870500
Car no. 1:-604870360
My doubt is why Car no. 4 is still there, after running gc. There is no
reference to it outside the function, right? So it should not have be
sweeped by GC?
Thanks!
- ----------------------------
Eustáquio "TaQ" Rangel
eustaquiorangel@yahoo.com
http://beam.to/taq
Usuário GNU/Linux no. 224050