2013-03-12 70 views
0

我有一個關於define方法的問題。 我有這個類定義方法來創建接受變量的方法

class A 
    def create_method(name,&block) 
    self.class.send(:define_method, name, &block) 
    end 
end 

a = A.new 
a.create_method("dyn_meth") {puts "this is dynamic method"} 
a.dyn_meth 

我設法創建方法名「dyn_meth」,但現在我想創建方法名「dyn_meth2」,在正常情況下接受變量是:

def dyn_meth2(var1,var2,&block) 
    puts "var1 = #{var1} . var2 #{var2} 
    block.call 
end 

怎麼能我使用define_method來創建「dyn_meth2」?

回答

0

Comme ca!

a.create_method("dyn_meth2") { |var| puts "var is #{var}" } 
a.dyn_meth2("monkey") 
#=> "var is monkey" 

如果你想對你的ARG默認那麼你喜歡這款

a.create_method("dyn_meth2") { |var=2| puts "var is #{var}" } 
a.dyn_meth2 
#=> "var is 2" 
至少,你要

最後但並非可變參數

a.create_method("dyn_meth2") { |*args| puts "var is #{args}" } 
a.dyn_meth2(1,2,3) 
#=> "var is [1,2,3] 
+0

謝謝,很多:) – fitram 2013-03-12 08:00:55

+0

沒問題! :) – 2013-03-12 08:12:28

+0

你錯過了最後兩個'create_method'參數中的結束引號。有人沒有真正運行代碼並將輸出粘貼到示例中。 ;-) – 2013-03-12 12:40:09

0

是否這樣?

a.create_method("dyn_meth2") {|var1, var2, &block| 
    puts "var1 = #{var1} . var2 #{var2}" 
    block.call 
} 
+0

感謝,很多:) – fitram 2013-03-12 08:01:20