在Ruby中创建模块变量

时间:2011-04-16 23:48:40

标签: ruby module class-variables

有没有办法在Ruby中的模块中创建一个类似于类变量的变量?我的意思是,它可以在不初始化模块实例的情况下访问,但可以更改(与模块中的常量不同)。

4 个答案:

答案 0 :(得分:149)

Ruby本身支持模块中的类变量,因此您可以直接使用类变量,而不是某些代理或伪类变量:

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'

答案 1 :(得分:28)

如果您不需要在实例中调用它,则可以在模块体中使用实例变量。

module SomeModule
  module_function
  def param; @param end
  def param= v; @param = v end
end

SomeModule.param
# => nil
SomeModule.param = 1
SomeModule.param
# => 1

实例变量@param将属于模块SomeModule,该模块是Module类的实例。

答案 2 :(得分:22)

您可以在模块中设置类实例变量。

module MyModule
   class << self; attr_accessor :var; end
end

MyModule.var = 'this is saved at @var'

MyModule.var    
=> "this is saved at @var"

答案 3 :(得分:8)

您还可以在模块定义中初始化值:

module MyModule
  class << self
    attr_accessor :my_variable
  end
  self.my_variable = 2 + 2
end

p MyModule.my_variable