define方法来创建接受变量的方法

时间:2013-03-12 07:19:00

标签: ruby

我对定义方法有疑问。 我有这个班级

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”?

2 个答案:

答案 0 :(得分:0)

喜欢这个吗?

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

答案 1 :(得分: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"

最后但并非最不重要的是,你想要varargs

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