operador - modulos ruby
Crear variables de módulo en Ruby (4)
Ruby admite nativamente variables de clase en módulos, por lo que puede usar variables de clase directamente, y no algunas variables proxy o pseudo-clase:
module T
@@foo = ''bar''
def self.set(x)
@@foo = x
end
def self.get
@@foo
end
end
p T.get #=> ''bar''
T.set(''fubar'')
p T::get #=> ''fubar''
¿Hay alguna manera de crear una variable en un módulo en Ruby que se comporte de manera similar a una variable de clase? Lo que quiero decir con esto es que se podría acceder sin inicializar una instancia del módulo, pero se puede cambiar (a diferencia de las constantes en los módulos).
Si no necesita llamar desde una instancia, puede simplemente usar una variable de instancia dentro del cuerpo del módulo.
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 de instancia @param
luego pertenecerá al módulo SomeModule
, que es una instancia de la clase Module
.
También puede inicializar el valor dentro de la definición del módulo:
module MyModule
class << self
attr_accessor :my_variable
end
self.my_variable = 2 + 2
end
p MyModule.my_variable
puede establecer una variable de instancia de clase en el módulo.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = ''this is saved at @var''
MyModule.var
=> "this is saved at @var"