Ruby 2.1.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Bindingクラス

class Binding

クラスの継承リスト: Binding < Object < Kernel < BasicObject

要約

ローカル変数のテーブルと self、モジュールのネストなどの情報を保 持するオブジェクトのクラスです。

組み込み関数 Kernel.#binding によっ てのみ生成され、Kernel.#eval の第 2 引数に使用します。 またトップレベルの Binding オブジェクトとして組み込み定数 Object::TOPLEVEL_BINDING が用意されています。

目次

インスタンスメソッド
eval local_variable_defined? local_variable_get local_variable_set

インスタンスメソッド

eval(expr, fname = __FILE__, lineno = 1) -> object[permalink][rdoc]

自身をコンテキストとし文字列 expr を Ruby プログラムとして評価しその結果を返します。 組み込み関数 Kernel.#eval を使って eval(expr, self, fname, lineno) とするのと同じです。

[PARAM] expr:
評価したい式を文字列で与えます。
[PARAM] fname:
ファイル名を文字列で与えます。式 expr が fname というファイル名にあるかのように実行されます。
[PARAM] lineno:
行番号を整数で与えます。式 expr の先頭行の行番号が lineno であるかのように実行されます。
def get_binding(str)
  binding
end
str = "hello"
p eval("str + ' Fred'")                      #=> "hello Fred"
p get_binding("bye").eval("str + ' Fred'")   #=> "bye Fred"

[SEE_ALSO] Kernel.#eval

local_variable_defined?(symbol) -> bool[permalink][rdoc]

引数 symbol で指定した名前のローカル変数が定義されている場合に true を、 そうでない場合に false を返します。

[PARAM] symbol:
ローカル変数名を Symbol オブジェクトで指定します。
def foo
  a = 1
  binding.local_variable_defined?(:a) # => true
  binding.local_variable_defined?(:b) # => false
end

このメソッドは以下のコードの短縮形です。

binding.eval("defined?(#{symbol}) == 'local-variable'")

[SEE_ALSO] Binding#local_variable_get, Binding#local_variable_set

local_variable_get(symbol) -> object[permalink][rdoc]

引数 symbol で指定した名前のローカル変数に設定された値を返します。

[PARAM] symbol:
ローカル変数名を Symbol オブジェクトで指定します。
[EXCEPTION] NameError:
引数 symbol で指定したローカル変数が未定義の場合に発生します。
def foo
  a = 1
  binding.local_variable_get(:a) # => 1
  binding.local_variable_get(:b) # => NameError
end

このメソッドは以下のコードの短縮形です。

binding.eval("#{symbol}")

[SEE_ALSO] Binding#local_variable_set, Binding#local_variable_defined?

local_variable_set(symbol, obj)[permalink][rdoc]

引数 symbol で指定した名前のローカル変数に引数 obj を設定します。

[PARAM] symbol:
ローカル変数名を Symbol オブジェクトで指定します。
[PARAM] obj:
引数 symbol で指定したローカル変数に設定するオブジェクトを指定します。
def foo
  a = 1
  bind = binding
  bind.local_variable_set(:a, 2) # set existing local variable `a'
  bind.local_variable_set(:b, 3) # create new local variable `b'
                                 # `b' exists only in binding
  p bind.local_variable_get(:a)  # => 2
  p bind.local_variable_get(:b)  # => 3
  p a                            # => 2
  p b                            # => NameError
end

このメソッドは以下のコード(ただし、obj が Ruby のコードで出力される場 合)と同様の動作をします。

binding.eval("#{symbol} = #{obj}")

[SEE_ALSO] Binding#local_variable_get, Binding#local_variable_defined?