2013-03-12 34 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