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

は、レシーバのコンテキストで定義されている定数の一覧を返します。

以上でリフレクションメソッド群の紹介は終わりです。コードの解析を行うときに必須のメソッドたちなので、今後の記事でも必要に応じて参照して行きます。



※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。