インタプリタは変数を基にして対象のオブジェクトにアクセスし要求されている処理を実行する
Rubyでは大きさの異なる,つまりスコープの異なる複数種のラベルが用意されている
それらは大きいものからグローバル変数、定数、クラス変数、インスタンス変数、ローカル変数である
Rubyインタプリタが起動されるとOSによって1つのプロセス空間が割り当てられ
最初にClassクラスオブジェクト、ModuleクラスオブジェクトおよびObjectクラスオブジェクトが生成され
次いで標準クラスおよびユーザ定義のクラスオブジェクト群(モジュールオブジェクトを含む)が生成され
そして各クラスオブジェクト内に1又は複数のインスタンスが生成される
なおRubyにおいてプロセス空間はObjectクラスのコンテキスト空間とほぼ等価である
プロセス空間にはクラス(モジュール)、オブジェクト、メソッドによって分離される複数の解釈のコンテキストつまり壁が生成される
インタプリタは各コンテキストにおいて変数を含むプログラムを解釈する
つまりプログラムの解釈において壁の内部を基本に解釈を行い
例外的に壁を越えてくるものを参照する
ローカル変数はそれが定義されたコンテキストの中からしか参照できない変数である
インスタンス変数は対象オブジェクト内でグローバルに参照できる変数である
クラス変数はそれが定義されたクラスとそのインスタンス内でグローバルに参照できる変数である
なおクラス変数はサブクラスが新たなコンテキストを作るものではないのでそのサブクラスおよびそのインスタンスでも参照できるようになる
グローバル変数はプロセス全体からグローバルに参照できる変数である
定数はクラス変数と同じだが,コンテキストを指定することによって外から参照できる
ここでグローバルとはその変数が定義されたコンテキストに拘わらずという意味である
したがってグローバル変数はどこからでも直接参照できるが
他の変数はその参照可能範囲(スコープ)外から直接参照できない
これらの変数にはメソッドを介して参照する
No comments:
Post a Comment