2017-04-15 33 views
2

是否可以声明使用define_method的动态方法,该方法对具有参数的块执行instance_exec?事情是这样的:创建采用自变量的动态方法

class D 
    def self.adapt (method,*args,&impl) 
    define_method(method) do 
     instance_exec(args,impl) 
    end 
    end 
end 

D.adapt(:foo,a,b) { a + b } 

puts D.new.foo(1,2) 
+0

请两个空格缩进代码:) –

+1

它做,对不起为^^ – tomatediabolik

回答

5

是的,你可以:

class D < Struct.new(:c) 
    def self.adapt (method, &impl) 
    define_method(method) do |*args| 
     instance_exec(*args, &impl) 
    end 
    end 
end 

D.adapt(:foo) { |a, b| a + b + c } 

puts D.new(3).foo(1, 2) 
# => 6 
+0

为什么有必要从子类'Struct.new(:C)'? –

+0

不是。这是为了表明赋予'D.adapt'的块可以访问'D'的实例变量。 – Gaston

+0

工程就像一个魅力,非常感谢你! – tomatediabolik