Ruby Language
Singe en Ruby
Recherche…
Remarques
Le patch de singe, bien que pratique, présente des pièges qui ne sont pas immédiatement évidents. Plus particulièrement, un patch comme celui-là dans l'environnement pollue la portée globale. Si deux modules ajoutent tous deux des Hash#symbolize
, seul le dernier module requis applique effectivement sa modification; le reste est effacé.
De plus, s'il y a une erreur dans une méthode patchée, le stacktrace pointe simplement vers la classe corrigée. Cela implique qu'il y a un bogue dans la classe Hash
elle-même (ce qui existe maintenant).
Enfin, Ruby étant très flexible avec les conteneurs à conserver, une méthode qui semble très simple lorsque vous écrivez a beaucoup de fonctionnalités indéfinies. Par exemple, la création de Array#sum
convient à un tableau de nombres, mais se casse à partir du tableau d'une classe personnalisée.
Une alternative plus sûre est celle des raffinements, disponibles en Ruby> = 2.0.
Ajout de fonctionnalités
Vous pouvez ajouter une méthode à n'importe quelle classe de Ruby, que ce soit une version intégrée ou non. L'objet appelant est référencé à self
aide de self
.
class Fixnum
def plus_one
self + 1
end
def plus(num)
self + num
end
def concat_one
self.to_s + '1'
end
end
1.plus_one # => 2
3.plus(5) # => 8
6.concat_one # => '61'