モジュールが含まれていて、拡張されていないと仮定すると、モジュールのインスタンス変数とクラス変数の違いは何ですか?
2つの違いはわかりません。
module M
@foo = 1
def self.foo
@foo
end
end
p M.foo
module M
@@foo = 1
def self.foo
@@foo
end
end
p M.foo
モジュール内で @ を @@ として使用してきましたが、最近、他のコードがモジュール内で @@ を使用しているのを見ました。それから私はそれを間違って使用していたのではないかと思いました。
モジュールをインスタンス化できないため、モジュールの @ と @@ に違いがあってはなりません。私が間違っている?
----------------------- 以下を追加 --------------------
コメントや投稿に関するいくつかの質問に答えるために、次のこともテストしました。
module M
@foo = 1
def self.bar
:bar
end
def baz
:baz
end
end
class C
include M
end
p [:M_instance_variabies, M.instance_variables] # [@foo]
p [:M_bar, M.bar] # :bar
c = C.new
p c.instance_variables
p [:c_instance_variabies, c.instance_variables] # []
p [:c_baz, c.baz] :baz
p [:c_bar, c.bar] # undefined method
クラス内にモジュールを含める場合、モジュール クラス変数とクラス メソッドはクラスで定義されません。