2012-01-12 10 views
2

私はRubyを学んでいて、非常に初心者の質問があります。 4種類の変数の違いは、主にスコープだけです。したがって、ローカル変数は現在のブロック内でのみ使用できます。現在のインスタンス内のインスタンス変数、すべてのスコープ内のグローバル変数、最後に現在のクラス内のクラス変数です。どうもありがとう!ローカル変数、インスタンス変数、グローバル変数、およびクラス変数の違いは何ですか?

+0

Uhmmm ...プログラミング言語Xで変数スコープを混乱させると、コードのさまざまな領域で変数にアクセスする簡単な実験が行われます。私は、ドキュメントを読んだり、それについて質問したりするのではなく、このようにスコープ規則をよく覚えていることが分かりました。さらに、私はそれをはるかに速く見つける。^_^ – skytreader

答えて

0

シワがありますが、それは正しいです。クラス変数(@@ foo)は、クラスメソッドとクラスのインスタンスメソッドの両方からアクセスできます。

これらは、継承に関してやや不自然な挙動を示します。このような変数を基本クラスに設定してサブクラスで再度設定すると、階層内のすべてのクラスの値が変更されます。クラス変数を使用して設定を保存している場合は、基本クラスの値を実際に変更せずに、サブクラスがベースクラスの値を "オーバーライド"できるようにしたい場合があります。 Railsはこのためにclass_attributeを提供しています:それはその振る舞いを持つアクセサメソッドを作成します。

最後に、実際には別の型ではありませんが、クラスはオブジェクトなのでクラスインスタンス変数もあります。これらは継承に関して何もしません。階層内の各クラスオブジェクトは、独自の完全独立したオブジェクトを持ちます。クラス変数とは異なり、インスタンスはクラスインスタンス変数を直接操作することはできません。

+1

クラス変数とクラスインスタンス変数の違いは、常にルビーで人を動かすことの1つです。このコンセプトの良い議論:http://railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/ –

+0

おかげさまで助けてくれてありがとう! –

0

あなたは正しいです。違いはただの範囲です。

0

これを直感的に理解することができてうれしいです。違いは単なるスコープです(ただし、メモリ内で扱われる方法はかなり異なります)。