この記事では、以下のトピックを探ります。
- method scope
- class scope
Before to start
私たちの最新のプロジェクトを紹介できることに興奮しています。 Ruby の楽しい事実 – Volume 1
この投稿をぜひ広めて共有してください! 🙏
お付き合いありがとうございました!
Rubyでは、プログラムのスコープはself
の値と強い相関があります。
ここでは、メソッド、クラス、トップレベルスコープのときにself
にどんな値があるのかを詳しく説明しましょう。
メソッドスコープ
Rubyでは、トップレベルスコープはmain
オブジェクトのコンテキストです。
実際、self
は現時点ではmain
オブジェクトを指しています。
さて、トップレベル スコープで定義されたメソッド内の self
のコンテキストはどうなっているでしょうか。
ここで、self
も main
オブジェクトを参照しています。
唯一の違いは、このメソッドの中でトップレベル スコープのローカル変数にアクセスできないことです。
これは、def
キーワードによってメソッドのコンテンツが完全に分離したスコープに埋め込まれるためです。
しかし、私たちのメソッドはトップレベル スコープで宣言されたインスタンス変数にアクセスすることが可能です。
実際、インスタンス変数はオブジェクトレベルで宣言されているので、self
が同じオブジェクト、この場合は main
オブジェクトを参照している別のスコープでこれらの変数にアクセスできます。
したがって、トップレベルスコープとトップレベルスコープで定義されたメソッドのいずれかで main
を指しているので、hello
メソッドの中で @instance_variable
インスタンス変数にアクセスできるようになりました。
クラススコープ
キーワードを使用した場合。
self
の値が変わる- クラスの内容が孤立したスコープに埋め込まれる
次の例を見てみましょう
ここで、このクラスではself
が異なる値になっており、Hello
クラスを指していることが分かります。
また、クラスの外で定義された変数やメソッドにはアクセスできません。
記事の最初のセクションで説明したのと同じ理由で、インスタンスメソッドのインスタンス変数にアクセスできることに注意してください。
パート II & III では、モジュール、入れ子クラス、ブロック(フラットスコープ)を使って、スコープを使って遊びます。
Voilà !