書き方
以下のコードでローカル変数のハッシュ(名前と値の対)として出力できます。
variables = binding.eval("local_variables").inject({}) { |h, vname| h[vname] = binding.eval(vname.to_s); h } STDERR.puts variables
解説
binding は組み込み関数 Kernel.#binding のことです。
binding.eval は、文字列をプログラムとして解釈し、実行した結果を返します。
binding.eval の第1引数に指定している local_variables は Kernel.#local_variables のことです。ローカル変数の名前の一覧を取得します。
以下のコードは、ローカル変数の「変数名」を全て取得するためのものです。
binding.eval("local_variables")
これだけでは名前の取得だけしかできません。デバッグ時には値も見たいでしょう。
値を取得するために再度 binding.eval を使います。以下のコードで変数名から値を取得できます*1。
v = binding.eval("変数名") # 事例では local_variables で取得した変数名を使っている v = binding.eval(vname.to_s)
Array の inject メソッドを使い、ローカル変数名の配列の各要素に以上のコードを適用し、ハッシュに変換しています。
参考
コメント
本ページの内容に関して何かコメントがある方は、以下に記入してください。
コメントはありません。 コメント/idiom/output_local_variables