0

我有一个关于定义方法的问题。我有这门课

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

4

2 回答 2

0

像这样?

a.create_method("dyn_meth2") {|var1, var2, &block| 
   puts "var1 = #{var1} . var2 #{var2}"
   block.call 
}
于 2013-03-12T07:28:15.597 回答
0

来吧!

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]
于 2013-03-12T07:29:20.370 回答