Is there any way to create a variable in a module in Ruby that would behave similar to a class variable? What I mean by this is that it would be able to be accessed without
you can set a class instance variable in the module.
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"
You can also initialize value within module definition:
module MyModule
class << self
attr_accessor :my_variable
end
self.my_variable = 2 + 2
end
p MyModule.my_variable
If you do not need to call it from within an instance, you can simply use an instance variable within the module body.
module SomeModule
module_function
def param; @param end
def param= v; @param = v end
end
SomeModule.param
# => nil
SomeModule.param = 1
SomeModule.param
# => 1
The instance variable @param
will then belong to the module SomeModule
, which is an instance of the Module
class.
Ruby natively supports class variables in modules, so you can use class variables directly, and not some proxy or pseudo-class-variables:
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"