web-dev-qa-db-ja.com

Rubyにモジュール変数を作成します

クラス変数と同様に動作するRubyのモジュールに変数を作成する方法はありますか?これが意味することは、モジュールのインスタンスを初期化せずにアクセスできるが、変更できることです(モジュールの定数とは異なります)。

104
Mark Szymanski

Rubyはモジュール内のクラス変数をネイティブにサポートしているため、プロキシ変数や擬似クラス変数ではなく、クラス変数を直接使用できます。

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"
151
coreyward

インスタンス内から呼び出す必要がない場合は、モジュール本体内でインスタンス変数を使用できます。

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に属します。

29
sawa

モジュールでクラスインスタンス変数を設定できます。

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

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

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

モジュール定義内で値を初期化することもできます。

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

p MyModule.my_variable
8
Nakilon