要約
ローカル変数のテーブルと self、モジュールのネストなどの情報を保持するオブジェクトのクラスです。
組み込み関数 Kernel.#binding によってのみ生成され、Kernel.#eval の第 2 引数に使用します。またトップレベルの Binding オブジェクトとして組み込み定数 Object::TOPLEVEL_BINDING が用意されています。
目次
- インスタンスメソッド
インスタンスメソッド
eval(expr, fname = __FILE__, lineno = 1) -> object
[permalink][rdoc][edit]-
自身をコンテキストとし文字列 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
irb -> object
[permalink][rdoc][edit]-
REPLのセッションを開始します。
2.5.0 からは require 'irb' せずに直接 binding.irb を呼び出しても使えるようになりました。
[SEE_ALSO] irb
local_variable_defined?(symbol) -> bool
[permalink][rdoc][edit]-
引数 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][edit]-
引数 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][edit]-
引数 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?
local_variables -> [Symbol]
[permalink][rdoc][edit]-
ローカル変数の一覧を Symbol の配列で返します。
def foo a = 1 2.times do |n| binding.local_variables #=> [:a, :n] end end
このメソッドは以下のコードと同様の動作をします。
binding.eval("local_variables")
receiver -> object
[permalink][rdoc][edit]-
保持するコンテキスト内での self を返します。
このメソッドは以下のコードと同様の動作をします。
binding.eval("self")
source_location -> [String, Integer]
[permalink][rdoc][edit]-
self の Ruby のソースファイル名と行番号を返します。
変数と定数/擬似変数 の __FILE__ と __LINE__ も参照してください。
p binding.source_location # => ["test.rb", 1]