Ruby/Rubyの基礎知識

Rubyにおけるリフレクションプログラミング(2ページ目)

eval族とbindingを中心としたRubyでの「リフレクションプログラミング」について改めて解説を行います

橋本 拓也

執筆者:橋本 拓也

Rubyガイド

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

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

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

【編集部おすすめの購入サイト】
Amazonで Ruby 関連の書籍をチェック!楽天市場で Ruby 関連の書籍をチェック!
  • 前のページへ
  • 1
  • 2
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます