ruby dsl


このgenerate_methodはモジュールGに定義され、一連のパラメータを受け入れて関連するメソッドを動的に作成する.クラスCにgenerate_を宣言することでDSL機能を実現しましたmethod:method 1,:method 2,クラスCに2つのインスタンスメソッドmethod 1,method 2を動的に追加させるのは面白いのではないでしょうか.
 
 

  
  
  
  
  1. module ModuleA 
  2.     def self.included(c)  #  
  3.     c.extend(ModuleB) 
  4.     end 
  5.  
  6.   module ModuleB 
  7.     def generate_method(*args) 
  8.       args.each do|method_name| 
  9.         define_method(method_name){puts method_name} 
  10.       end 
  11.     end 
  12.   end 
  13.  
  14. end 
  15. class Test 
  16.   include ModuleA 
  17.   generate_method :method_one , :method_two 
  18.  
  19. end 
  20.  
  21. a = Test.new 
  22. a.method_one 
  23. a.method_two