Czy istnieje sposób na utworzenie zmiennej w module w Rubim, która zachowywałaby się podobnie do zmiennej klasy? Rozumiem przez to, że byłby dostępny bez inicjowania instancji modułu, ale można go zmienić (w przeciwieństwie do stałych w modułach).
Czy istnieje sposób na utworzenie zmiennej w module w Rubim, która zachowywałaby się podobnie do zmiennej klasy? Rozumiem przez to, że byłby dostępny bez inicjowania instancji modułu, ale można go zmienić (w przeciwieństwie do stałych w modułach).
Odpowiedzi:
Ruby natywnie obsługuje zmienne klas w modułach, więc możesz używać zmiennych klas bezpośrednio, a nie niektórych zmiennych proxy lub pseudoklas:
module Site
@@name = "StackOverflow"
def self.setName(value)
@@name = value
end
def self.name
@@name
end
end
Site.name # => "StackOverflow"
Site.setName("Test")
Site.name # => "Test"
defined?(@@foo) => "class variable"
.
@
zmiennej instancji. Czy istnieje konkretny powód używania zmiennych klas? Dziękuję za odpowiedź.
T.get
i T::get
?
Jeśli nie musisz wywoływać go z poziomu instancji, możesz po prostu użyć zmiennej instancji w treści modułu.
module SomeModule
module_function
def param; @param end
def param= v; @param = v end
end
SomeModule.param
# => nil
SomeModule.param = 1
SomeModule.param
# => 1
Zmienna instancji @param
będzie wtedy należeć do modułu SomeModule
, który jest instancją Module
klasy.
w module można ustawić zmienną instancji klasy.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"