8.18. Implementowanie metod klasowych i metod-singletonów
Problem
Chcemy zdefiniować metodę charakterystyczną dla całej klasy, nie dla jej poszczególnych obiektów. Chcemy także zdefiniować pewną metodę dla pojedynczego obiektu, nie dla wszystkich obiektów klasy.
Rozwiązanie
W celu zdefiniowania metody klasowej należy w jej definicji poprzedzić jej nazwę nazwą klasy. Definicję tę można umieścić zarówno w obrębie klasy, jak i poza nią.
W poniższym przykładzie definiowana jest metoda Regexp.valid?
, sprawdzająca, czy dany łańcuch można skompilować do postaci wyrażenia regularnego. Metoda ta ma związek z klasą Regexp
(wykorzystuje jej metodę compile
), lecz pozostaje bez związku z jakimś konkretnym obiektem tej klasy.
class Regexp def Regexp.is_valid?(str) ...
Get Ruby. Receptury now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.