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'


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow