Est-il possible de créer une variable dans un module dans Ruby qui se comporterait de la même manière qu'une variable de classe? Ce que je veux dire par là, c'est qu'elle serait accessible sans initialiser une instance de le module, mais il peut être modifié (contrairement aux constantes dans les modules).
Ruby supporte nativement les variables de classe dans les modules, vous pouvez donc utiliser les variables de classe directement, et non certaines variables proxy ou pseudo-classes:
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"
Si vous n'avez pas besoin de l'appeler depuis une instance, vous pouvez simplement utiliser une variable d'instance dans le corps du module.
module SomeModule
module_function
def param; @param end
def param= v; @param = v end
end
SomeModule.param
# => nil
SomeModule.param = 1
SomeModule.param
# => 1
La variable d'instance @param
appartiendra alors au module SomeModule
, qui est une instance de la classe Module
.
vous pouvez définir une variable d'instance de classe dans le module.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"
Vous pouvez également initialiser une valeur dans la définition du module:
module MyModule
class << self
attr_accessor :my_variable
end
self.my_variable = 2 + 2
end
p MyModule.my_variable