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 O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.