20-03-2011, 11:08 AM
C'est clair que le Monkey Patching de Ruby semble déroutant. Heureusement que ce n'est pas un problème de la vraie vie : aucun développeur de librairie n'irait surcharger une méthode existente probablement utilisée dans le programme qui charge ladite librairie.
Toutefois, pour limiter ces problèmes et rendre le Monkey Patching plus local, des gens ont proposé le principe des refinement dans Ruby (ce serait a priori pour une prochaine version de Ruby 1.9 ou pour Ruby 2).
Voici le principe :
Actuellement, ActiveSupport ajoute déjà ces méthodes d'extension de temps, qui permettent d'écrire des choses comme 2.days.ago ou 4.hours.from_now. C'est réalisé grâce au Monkey Patching et ça ne pose aucun problème. Les refinement ne seront donc vraiment utile que sur des cas très particuliers.
Sephi-Chan
Toutefois, pour limiter ces problèmes et rendre le Monkey Patching plus local, des gens ont proposé le principe des refinement dans Ruby (ce serait a priori pour une prochaine version de Ruby 1.9 ou pour Ruby 2).
Voici le principe :
module TimeExtensions
refine Fixnum do
def minutes
self * 60
end
end
end
class MyApp
using TimeExtensions
def initialize
p 2.minutes
end
end
Actuellement, ActiveSupport ajoute déjà ces méthodes d'extension de temps, qui permettent d'écrire des choses comme 2.days.ago ou 4.hours.from_now. C'est réalisé grâce au Monkey Patching et ça ne pose aucun problème. Les refinement ne seront donc vraiment utile que sur des cas très particuliers.
Sephi-Chan