eval族

2017/11/26

evalについてです。

|メソッド名|動作| |Kernel.#eval|selfが呼び出された式を評価する| |Module#class_eval|レシーバのクラスをselfとして式を評価する| |Module#module_eval|レシーバのモジュールをselfとして式を評価する| |Basic#Object#instace_eval|レシーバのオブジェクトをselfとして式を評価する|

Kernel.#eval

foo = bar
eval foo
=> "bar"

evalとBindingオブジェクト

Bindingオブジェクトを使うことで、コンテキストに名前がないものでも評価されるようになります。

class Foo
  def initialize
    @foo = foo
  end

  def bar
    local_val = bar
    binding
  end
end

x = Foo.new
y = x.bar
eval "@foo", y
=> foo
eval "local_val", y
=> bar

ただし、initializeにbindingをさしてもうまくいきませんでした。

eval "@foo", y
TypeError: wrong argument type String (expected binding)

以上です。

参考

www.amazon.co.jp