2012-08-27 4 views
6
でインスタンスとローカル変数の違い

可能性の重複:
Rails and class variablesルビー:Rubyの

は誰もいただきましたRubyのインスタンス変数とローカル変数の違いを教えてくださいませんか?

私の知る限り、インスタンス変数とローカル変数は同じで、両方ともメソッド自体の中で宣言されていますが、インスタンス変数は@ symbolを使って宣言されています。

+0

を私はここで、この上の説明があります。http://stackoverflow.com/questions/11523547/rails-and-class-variables/11523632#11523632 – Frost

+1

Googleのそれ。私は真剣です。 – vise

答えて

11

scopeです。ローカル変数は、それが定義されているメソッドでのみ可視/使用可能である(すなわち、メソッドが戻るときに消える)。

インスタンス変数は、定義されているクラスのインスタンス内の他の場所で見ることができます(これはクラスのすべてのインスタンス間で共有されるクラス変数とは異なります)。しかし、の場合は、のインスタンス変数を定義することが重要です。

def method_one 
    @var = "a variable" 

    puts @var 
end 

def method_two 
    puts @var 
end 

@varが異なる値に依存しています:あなたは1つのメソッドでインスタンス変数を定義しますが、最初のものを呼び出す前に、別の方法でそれを使用しようとすると、あなたのインスタンス変数にnilの値を持つことになりますあなたは、各メソッドを呼び出すとき:

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 
+0

すばらしい答え - ローカル変数(localVarなど)がmethod_oneで宣言されている場合は、method_twoから呼び出すことはできません。 – BKSpurgeon