mercredi 23 avril 2008

Ruby : Sécuriser la redéfinition de méthode

Etant un peu angoissé de nature, il y a un truc qui me tracasse en Ruby depuis quelques temps : l'absence de warning à la redéfinition de méthodes existantes. Un exemple ?




class Object
def self.new
puts "Oh dude !"
end
end

a = Array.new 46
#=> **Judgement Day**


Ceci devrait bien vous convaincre de l'utilité d'avertir le programmeur durant le développement. Rappelons aussi que Object.methods dénombre 77 méthodes pour cette racine de tout objet en Ruby...

Du coup, voilà un petit trick qui permet de sécuriser ce point, grâce à la méthode de classe method_added :


class Object
def self.method_added sym
if self.methods.include? sym.to_s then
print "WARNING: method #{sym}" + \\
"of class #{self} redefined\n"

end
end
end

class Integer
def clone
puts "I'm your dark twin !"
end
end
#=> WARNING: method clone of class Integer redefined

2 commentaires:

Benjamin Francisoud a dit…

bonne idée ;) j'y avais pas pensé!

Sobe a dit…

C'est typiquement le genre de petites choses qui me gênent en Ruby, comme le droit de modifier les constantes, etc...

Sécurisons tout ça !