私は主に最上位レベルで Ruby をいじっており、通常は次のようなコードを記述します。
@x = 'foo'
def show_var
puts @x
end
show_var # => foo
この例がどのように機能するかに基づいて、クラスとオブジェクトの両方でインスタンス変数を使用できると思いました。
今日、私はこれに遭遇しました。インスタンス変数の理解が間違っているようです:
class Test
@x = "foo" #you would need to define this inside 'initialize' for this to be available to show_var
def show_var
puts @x
end
end
Test.new.show_var # => nil
2 番目の例は、インスタンス変数がどのように機能するかのようです。クラス内でインスタンス変数を定義すると、その変数はそのスコープ内にのみ存在し、インスタンス メソッドには存在しません。
次に、私の質問は...変数 @x がインスタンスメソッドのスコープ内に存在してはならないときに、最初のケースが「foo」を出力するのはなぜですか? また、トップレベルのメソッドに使用したいトップレベルのクラスで変数を定義する適切な方法は何ですか?