Szukaj…


Uwagi

Łatanie małp, chociaż wygodne, ma pewne pułapki, które nie są od razu oczywiste. Przede wszystkim łatka taka jak w tym przykładzie zanieczyszcza zasięg globalny. Jeśli oba moduły dodają Hash#symbolize , tylko ostatni wymagany moduł faktycznie zastosuje jego zmianę; pozostałe są usuwane.

Ponadto, jeśli w poprawionej metodzie występuje błąd, stacktrace po prostu wskazuje na poprawioną klasę. Oznacza to, że w samej klasie Hash występuje błąd (który jest teraz).

Wreszcie, ponieważ Ruby jest bardzo elastyczny w przechowywaniu kontenerów, metoda, która wydaje się bardzo prosta podczas pisania, ma wiele niezdefiniowanych funkcji. Na przykład utworzenie Array#sum jest dobre dla tablicy liczb, ale ulega zerwaniu, gdy podano tablicę klasy niestandardowej.

Bezpieczniejszą alternatywą są udoskonalenia, dostępne w Ruby> = 2.0.

Dodanie funkcjonalności

Możesz dodać metodę do dowolnej klasy w Rubim, bez względu na to, czy jest ona wbudowana, czy nie. Obiekt wywołujący jest przywoływany za pomocą 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow