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"

そして、あなたがあなたの引数にデフォルトを持ちたいなら、あなたはこれが好きです

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