Ruby には 5 つの変数スコープがあります。
- ローカル変数: これらは通常の変数、 example
x = 25
でy = gaurish
、x
とy
はローカル変数です。 - インスタンス変数: これらは
@
、実際の変数名の前に記号で示されます。クラスの各インスタンス/オブジェクトが異なる/個別の値を持つように、主にクラスで使用されます。例。@employee.name = 'Alex'
- クラス変数:
@@
変数名の前に記号を付けて示します。クラス変数、すべてのインスタンス/オブジェクトに同じ値があると思います。 - グローバル変数
$
:シンボルで始まり、どこからでもアクセスできます。例$LOAD_PATH
- 定数: 大文字で始める必要がありますが、慣例により
ALL_CAPS
. ただし、これは定数ですが、その値は定数ではなく、変更できます (ただし、ruby は警告をスローします)。つまり、これも変数のように機能します。
お気づきかもしれませんが、上記はすべて、何らかの型の値を格納する変数であり、その値を変更できます。ただし、各スコープは少し異なることを行います。5 つの異なるタイプの変数スコープを持つことは、私を混乱させます。主に、どのような場合にコードで特定のスコープを使用する必要があるかを判断するのが困難です。だから私は私の心にいくつかの質問があります。お答えください:
- インスタンス変数とは異なり、ローカル変数とクラス変数はすべてのオブジェクト/インスタンスで同じままであることに気付きました。では、ローカル変数とクラス変数の違いは何ですか?
- クラス変数の代わりにローカル変数を使用できますか? またはその逆。はいの場合はその理由を、いいえの場合はその理由を教えてください。
global $x
ruby のグローバル変数は、PHPの邪悪な変数を思い起こさせます。ruby のグローバル変数も悪と見なされるため、使用しないでください。または、ルビーでグローバル変数を使用することが理にかなっている特定のケースがありますか?- 定数が定数ではなく、値を変更できるのはなぜですか? 定義による定数の値は定数である必要がありますか? それ以外の場合は、別の変数を使用して、その値を変更しないでください。それはRubyの CONSTANT と同等でしょうか?
- ruby の 5 つの異なる変数スコープの違いを説明するページ/リソース/リンクはありますか? 参考までに、手元に置いておきたいと思います。
- どのようなユースケースで、コード内で特定の変数スコープを使用する必要がありますか? したがって、5つのケースすべてをcanの例で説明すると、クールになるでしょう。これが私の混乱の主な理由です。
public
Javaのような事実上の選択はありますか? ほとんどのユースケースで安全な方法はどれですか?
時間を割いて質問を読んで回答していただきありがとうございます