lundi 28 avril 2008
Comment changer le comportement de "new" dans ruby
Par lucas, lundi 28 avril 2008 à 22:04 :: Scientifique
Oui, c'est vrai, on utilise initialize nous dit Pouype, mais on peut tout à fait bidouiller avant de créer une instance en tournant autour de "new", voici le code:
2 class << self #construction magique pour que "self" devienne la classe Truc qu'on est en train de créer, car alias marche sur les méthodes d'instances
3 alias :oldnew :new
4 end
5
6 attr_accessor :bidule
7
8 def Truc.new
9 p "salut"
10 t = Truc.oldnew #l'instance est créée maintenant là tout de suite, pas avant pas après
11 t.bidule = :chose
12 t #si on ne retourne pas t, alors ce sera :chose qui sera retourné
13 end
14 end
15
16 p Truc.new.inspect
Pour le commentaire, je dirais que c'est juste une preuve du concept, la méthode la plus propre est de créer une méthode de classe du style Truc.new_avec_prout qui à son tour appellera Truc.new .
Pour ceux qui se demandent comment ça se fait qu'on puisse faire ça, c'est qu'il n'y a pas de magie dans Ruby, les concepts de classes/objets/instances ne font pas d'exception à la règle (à ma connaissance). C'est entre autre pour cette raison que Ruby est un peu lent, mais ça prouve qu'il est cohérent et reste un joujou trop génial.