Comment changer le comportement de "new" dans ruby
Par lucas, lundi 28 avril 2008 à 22:04 :: Scientifique :: #29 :: rss
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.
Commentaires
1. Le lundi 28 avril 2008 à 23:57, par pouype
Ajouter un commentaire