読者です 読者をやめる 読者になる 読者になる

eval族

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