コードは有効です。クラスインスタンス変数を使用しています。Jörgが言ったように、それらは一般的にクラス変数よりも好まれます。どちらも同じ目的を達成できますが、クラス変数にはいくつかの落とし穴があります。クラス変数とクラスインスタンス変数の長所と短所については、Rubyのクラス変数とインスタンス変数を参照してください。
クラスインスタンス変数を使用することの1つの欠点は、それらが「通常の」インスタンス変数と同じように見えることです。これにより、新しいRubyプログラマーが不意を突かれる可能性があります。以下のメソッドself.print_bar
とprint_bar
メソッドは、さまざまな@barインスタンス変数を指しています。
class Foo
@bar = "bar"
def initialize
@bar = "foo"
end
def self.print_bar
puts @bar #=> "bar"
end
def print_bar
puts @bar #=> "foo"
end
end
これは私の意見では大きな欠点ではありませんが、あなたは尋ねました:)
クラスインスタンス変数がサブクラスで使用できないという事実は、必ずしも欠点ではありません。それはすべて、プログラムをどのように動作させるかによって異なります。