7

重複の可能性:
Rails とクラス変数

Ruby インスタンス変数とローカル変数の違いを教えてください。

私の知る限り、インスタンス変数とローカル変数の両方が同じであり、両方ともメソッド自体の内部で宣言されており、インスタンス変数が @ シンボルを使用して示されていることを除きます。

4

1 に答える 1

13

それは範囲の問題です。ローカル変数は、それが定義されているメソッドでのみ表示/使用可能です (つまり、メソッドが戻ると消えます)。

一方、インスタンス変数は、それが定義されているクラスのインスタンス内のどこからでも見ることができます (これは、クラスのすべてのインスタンス間で共有されるクラス変数とは異なります)。ただし、インスタンス変数を定義する時期が重要であることに注意してください。あるメソッドでインスタンス変数を定義し、最初のメソッドを呼び出す前に別のメソッドで使用しようとすると、インスタンス変数の値は nil になります。

def method_one
  @var = "a variable"

  puts @var
end

def method_two
  puts @var
end

@var は、各メソッドをいつ呼び出すかによって異なる値になります。

method_two() # Prints nil, because @var has not had its value set yet

method_one() # Prints "a variable", because @var is assigned a value in method_one

method_two() # Prints "a variable" now, because we have already called method_one
于 2012-08-27T13:19:51.317 に答える