module_eval

module_eval

ri

 ----------------------------------------------------- Module#module_eval
      mod.class_eval(string [, filename [, lineno)  => obj
      mod.module_eval {|| block }                     => obj
 ------------------------------------------------------------------------
      Evaluates the string or block in the context of _mod_. This can be
      used to add methods to a class.  module_eval  returns the result of
      evaluating its argument. The optional _filename_ and _lineno_
      parameters set the text for error messages.
 
         class Thing
         end
         a = %q{def hello() "Hello there!" end}
         Thing.module_eval(a)
         puts Thing.new.hello()
         Thing.module_eval("invalid code", "dummy", 123)
 
      _produces:_
 
         Hello there!
         dummy:123:in `module_eval': undefined local variable
             or method `code' for Thing:Class
 

refe

 Module#module_eval
 --- module_eval(expr, [fname, [lineno=1)
 --- module_eval {|mod| .... }
 
     モジュールのコンテキストで文字列 expr を評価してその結果を返
     します。
     fname、lineno が与えられた場合は、ファイル fname、
     行番号 lineno にその文字列があるかのようにコンパイルされ、ス
     タックトレース表示などのファイル名/行番号を差し替えることができま
     す。
 
     ブロックが与えられた場合にはそのブロックモジュールのコンテキスト
     で評価してその結果を返します。ブロック引数 mod には
     self が渡されます。
 
     モジュールのコンテキストで評価するとは、実行中そのモジュールが
     self になるということです。つまり、そのモジュールの定義文の
     中にあるかのように実行されます。
 
     ただし、ローカル変数module_eval の外側のスコープと共有し
     ます。ruby 1.6 feature: version 1.6.8 以降、定数、クラス変数
     のスコープも外側のスコープになります。
 
     *1: module_eval のブロック中でメソッドを定義する場合、
     instance_eval と同様の制限があります。詳細はそちらの
     説明を参照してください。
 
     Object#instance_eval [Object/instance_eval],
     Module#class_eval [Module/class_eval]
     Module.new も参照してください。
 

*1**