bindingとEval
前のページで「evalは呼び出された箇所のコンテキストでコードを評価する」と書きましたが、evalの第二引数にBindingオブジェクトを渡すと、Bindignのコンテキストで評価させることが出来ます。
変数アクセスを提供
改めて言うまでもありませんが、通常ローカル変数は「x = 1
」とすれば宣言・束縛が行われ、値の参照には単に「x
」と書けば良いだけです。任意のbindingで定義されている変数を参照にするには
Binding#local_variables
※Binding#local_variable_set
Binding#local_variable_get
などを使います。
※ Ruby2.1以前はプライベートメソッド。詳しくは前回の記事を参照してください。
同様に、レシーバのコンテキストにおけるインスタンス変数、クラス変数にアクセスする次のようなメソッドが用意されています。
Kernel#instance_variables
Kernel#instance_variable_set
Kernel#instance_variable_get
Module#class_variables
Module#class_variable_set
Module#class_variable_get
また、
Module#constants
は、レシーバのコンテキストで定義されている定数の一覧を返します。
以上でリフレクションメソッド群の紹介は終わりです。コードの解析を行うときに必須のメソッドたちなので、今後の記事でも必要に応じて参照して行きます。