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.