121

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

4

4 に答える 4

173

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"
于 2011-04-16T23:52:25.513 に答える
32

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

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モジュールに属します。SomeModuleModule

于 2011-04-17T03:02:33.980 に答える
25

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

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

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

MyModule.var    
=> "this is saved at @var"
于 2012-01-09T05:07:35.090 に答える
8

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

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

p MyModule.my_variable
于 2016-03-04T12:40:46.673 に答える