Ruby Language
Łatka Monkey w Ruby
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'