Sök…


Anmärkningar

Monkey patchning, även om det är praktiskt, har några fallgropar som inte är omedelbart uppenbara. Framför allt förorenar en sådan lapp i exemplet den globala räckvidden. Om två moduler båda lägger till Hash#symbolize , tillämpar bara den senaste modulen som krävs faktiskt dess ändring; resten raderas.

Dessutom, om det finns ett fel i en korrigerad metod, pekar stacktrace helt enkelt till den korrigerade klassen. Detta innebär att det finns ett fel i Hash klassen själv (som det finns nu).

Slutligen, eftersom Ruby är väldigt flexibel med vilka behållare som ska hållas, en metod som verkar mycket enkel när du skriver den har massor av odefinierad funktionalitet. Att skapa Array#sum är till exempel bra för en mängd siffror, men bryts när du får en matris av en anpassad klass.

Ett säkrare alternativ är förfiningar, tillgängliga i Ruby> = 2.0.

Lägga till funktionalitet

Du kan lägga till en metod till valfri klass i Ruby, oavsett om det är en inbyggd eller inte. Det anropande objektet refereras med mig 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow