8.2. Zarządzanie danymi klasowymi

Problem

Chcemy zdefiniować zmienną stanowiącą własność klasy, nie każdego jej obiektu z osobna, wspólną dla wszystkich jej obiektów.

Rozwiązanie

Zmienną stanowiącą własność klasy (w odróżnieniu od zmiennej instancyjnej, stanowiącej własność konkretnego obiektu) definiuje się, poprzedzając jej nazwę parą znaków @@. W poniższym przykładzie definiowana jest jedna zmienna instancyjna i jedna zmienna klasowa:

class Warning
  @@translations = { :pl => 'Świeżo malowane',
                     :en => 'Wet Paint' }

  def initialize(language=:pl)
    @language = language
  end

  def warn
    @@translations[@language]
  end
end
Warning.new.warn                              # => "Świeżo malowane"
Warning.new(:en).warn                         # => "Wet Paint"

Dyskusja

Zmienne klasowe służą do przechowywania ...

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.