Anche se l’esempio è banale,
colgo lo spunto di Gabriele e incomincio la gloriosa…
*** Ruby-it FacetsTip Series
*** FacetsTip #1: Class.subclasses
Facile facile giusto per cominciare:
E:\prj\archeodata>irb
irb(main):001:0> class Base; end #=> nil
irb(main):002:0> class Ext1 < Base; end #=> nil
irb(main):003:0> class Ext2 < Base; end #=> nil
irb(main):004:0> require ‘facets/core/class/subclasses’ #=> true
irb(main):005:0> Base.subclasses #=> [Ext2, Ext1]
irb(main):006:0> Ext1.subclasses #=> []
irb(main):007:0> class Ext11 < Ext1; end #=> nil
irb(main):008:0> Ext1.subclasses #=> [Ext11]
irb(main):009:0> Base.subclasses #=> [Ext2, Ext11, Ext1]
In pratica vi restituisce un’array con le sottoclassi. Molto carino no?
L’unica cosa è che oltre al debugging non mi viene in mente come si possa
usare in maniera profittevole…
PS: i FacesTip presuppongono spunti e commenti sugli snippet, quindi
dateci
sotto
Anche se l’esempio è banale,
colgo lo spunto di Gabriele e incomincio la
gloriosa…
*** Ruby-it FacetsTip Series
*** FacetsTip #1: Class.subclasses
In pratica vi restituisce un’array con le
sottoclassi. Molto carino no?
L’unica cosa è che oltre al debugging non mi viene
in mente come si possa
usare in maniera profittevole…
esempio reale: supponi di avere una cosa tipo
activerecord, in cui dichiari tante sottoclassi di
Base per poi usarle in qualche modo automaticamente.
Invece di smanettare con #inherited per tenerne
traccia puoi usare
def Base.setup
subclasses.each do |c|
fai qualcosa con c
end
end
Oppure se hai un qualcosa in cui caricare dei plugin
(sottoclassando BasePlugin), e poi vuoi mostrarli
all’utente (per farglieli
attivare/deattivare/modificare) invece di lavorare a
livello di file puoi usare #subclasses.
Immagino che gli Smalltalker ci vedano più usi, io
sono in un caso di mezzo blub paradox
Il giorno ven, 14/07/2006 alle 13.08 -0700, gabriele renzi ha scritto:
Oppure se hai un qualcosa in cui caricare dei plugin
(sottoclassando BasePlugin), e poi vuoi mostrarli
all’utente (per farglieli
attivare/deattivare/modificare) invece di lavorare a
livello di file puoi usare #subclasses.
Immagino che gli Smalltalker ci vedano più usi, io
sono in un caso di mezzo blub paradox