Usare Object Space

Vedi tutte le pagine e le modifiche recenti o scarica i sorgenti nella pagina


Il modulo ObjectSpace e’ un modulo built-in in ruby, e come tale e’ documentato nel pickaxe (potete leggerlo qui ) e tramite ri.

Questo modulo permette di accedere come e’ evidente, allo Spazio degli Oggetti. L’interprete ruby, infatti, in ogni momento deve sapere quali sono gli oggetti che esistono nel sistema. Ovviamente, visto che quest’informazione esiste, perché non renderla disponibile agli utenti?

L’unico metodo che analizziamo in questa pagina e’ ObjectSpace#each_object()

Questo metodo ci permette di rintracciare tutti gli oggetti esistenti appartenenti ad una classe stabilita da noi. Facciamo una prova con IRB:
 >> ObjectSpace.each_object(Bignum) {|x| puts x }
 => 0
Questo ci dice che non esistono oggetti di classe Bignum. Poiche’ IRB e’ gia’ un programma complesso, se provate ad usare una classe come String avrete un output enorme. Facciamo una prova con una nostra classe:
 >> class Mia
 >>  def initialize(a)
 >>   @a=a
 >>  end
 >> end
 => nil
 >> a=Mia.new 10
 => #<Mia:0x27d0228 @a=10>
 >> b=Mia.new 20
 => #<Mia:0x27ccc58 @a=20>
 >> ObjectSpace.each_object(Mia) {|x| puts x }
 #<Mia:0x27ccc58>
 #<Mia:0x27d0228>
 => 2
E’ ovvio che avremmo potuto manipolare questi oggetti in modo molto piu’ complesso, ma per ora basta vedere il funzionamento :)
Updated on November 27, 2005 02:37 by Gabriele Renzi (151.42.223.101)