【问题标题】:Create dynamic method that takes argument创建带参数的动态方法
【发布时间】:2017-04-15 23:32:36
【问题描述】:

是否可以使用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)

【问题讨论】:

  • 请用两个空格缩进你的代码:)
  • 完成了,抱歉^^

标签: ruby metaprogramming


【解决方案1】:

是的,您可以:

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

【讨论】:

  • 为什么必须从Struct.new(:c)子类化?
  • 不是。这是为了表明给D.adapt的块可以访问D的实例变量。
猜你喜欢
  • 2016-11-09
  • 1970-01-01
  • 2013-03-29
  • 2021-12-05
  • 2015-11-30
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-10-03
相关资源
最近更新 更多