Ruby'de bir modülde bir sınıf değişkenine benzer davranan bir değişken yaratmanın herhangi bir yolu var mı? Bununla demek istediğim, modülün bir örneğini başlatmadan erişilebileceğidir, ancak değiştirilebilir (modüllerdeki sabitlerin aksine).
Ruby'de bir modülde bir sınıf değişkenine benzer davranan bir değişken yaratmanın herhangi bir yolu var mı? Bununla demek istediğim, modülün bir örneğini başlatmadan erişilebileceğidir, ancak değiştirilebilir (modüllerdeki sabitlerin aksine).
Yanıtlar:
Ruby, modüllerdeki sınıf değişkenlerini yerel olarak destekler, böylece sınıf değişkenlerini doğrudan kullanabilirsiniz, bazı proxy veya sözde sınıf değişkenlerini kullanamazsınız:
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"
.
@
örnek değişkeninden alabileceğimi fark ettim . Sınıf değişkenlerini kullanmanın belirli bir nedeni var mı? Cevap için teşekkürler.
T.get
ve T::get
?
Bir örnek içinden çağırmanız gerekmiyorsa, modül gövdesi içinde bir örnek değişkeni kullanabilirsiniz.
module SomeModule
module_function
def param; @param end
def param= v; @param = v end
end
SomeModule.param
# => nil
SomeModule.param = 1
SomeModule.param
# => 1
Örnek değişkeni @param
daha sonra sınıfın SomeModule
bir örneği olan modüle ait olacaktır Module
.
modülde bir sınıf örneği değişkeni ayarlayabilirsiniz.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"