@Phrogzはすばらしい解決策を示しましたが、詳細は知っておく必要があります。
ここでは、実際にクラス変数ではありませんが、同じ名前の実クラス変数を初期化すると古い参照が失われるため、誰が気にしますか?class-level instance variable
を作成します。
は、fakenessを検査し、上記のコードを使用し、それに配列を持つ:
class Foo
@class_var = [42]
class << self
attr_accessor :class_var
end
end
b = [Foo.class_var]
Foo.class_var = 69
p b # still [[42]]
そして、あなたが問題を得ようとしている、実際のクラスになっていた@@
を介して可変を取得しようとしたとき変数。
class Bar
@class_var = [42]
class << self
attr_accessor :class_var
end
def biz
self.class.class_var
end
def baz
@@class_var
end
end
p Bar.new.biz # self.class. is kinda a way to emulate the reference from outside
p Bar.new.baz # and exception, because you don't really have a class variable defined yet!
あなたが理由を知っていることが分かっていない限り、あなたは '@@'変数を望んでいません。クラスレベルのインスタンス変数(下の私の答えを参照)は、より多くの仕事をしてくれますが、サブクラスに関してはあまり驚くことはありません。あなたは本当に何を達成しようとしていますか? – Phrogz
私は今何が起こっているのか見て、私は編集を削除するつもりです。私はattr_accessorがRailsのものであると誤解していました。 – jcollum