クラス変数と同様に動作するRubyのモジュールに変数を作成する方法はありますか?これが意味することは、モジュールのインスタンスを初期化せずにアクセスできるが、変更できることです(モジュールの定数とは異なります)。
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"
インスタンス内から呼び出す必要がない場合は、モジュール本体内でインスタンス変数を使用できます。
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
に属します。
モジュールでクラスインスタンス変数を設定できます。
module MyModule
class << self; attr_accessor :var; end
end
MyModule.var = 'this is saved at @var'
MyModule.var
=> "this is saved at @var"
モジュール定義内で値を初期化することもできます。
module MyModule
class << self
attr_accessor :my_variable
end
self.my_variable = 2 + 2
end
p MyModule.my_variable