Zoeken…


Opmerkingen

Monkey patching, hoewel handig, heeft een aantal valkuilen die niet meteen duidelijk zijn. Het meest opvallend is dat een patch zoals die in het voorbeeld het wereldwijde bereik vervuilt. Als twee modules beide Hash#symbolize , past alleen de laatst vereiste module de wijziging daadwerkelijk toe; de rest wordt gewist.

Bovendien, als er een fout is in een gepatchte methode, verwijst de stacktrace gewoon naar de gepatchte klasse. Dit houdt in dat er een bug is in de Hash klasse zelf (die er nu is).

Ten slotte, omdat Ruby zeer flexibel is met wat containers moet bevatten, heeft een methode die heel eenvoudig lijkt wanneer je het schrijft veel ongedefinieerde functionaliteit. Het maken van Array#sum is bijvoorbeeld goed voor een reeks getallen, maar breekt wanneer een reeks van een aangepaste klasse wordt gegeven.

Een veiliger alternatief zijn verfijningen, beschikbaar in Ruby> = 2.0.

Functionaliteit toevoegen

U kunt een methode toevoegen aan elke klasse in Ruby, of deze nu ingebouwd is of niet. Het aanroepende object wordt verwezen met behulp van 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow