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.geti 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 @parambędzie wtedy należeć do modułu SomeModule, który jest instancją Moduleklasy.
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"