我有以下样的方法定义的:
method_name = :foo
method_arguments = [:bar, :baz]
method_mandatory_arguments = {:quux => true}
method_body = ->{ quux ? bar + baz : bar - baz }
所以我希望得到一个真正的方法。 但define_method没有任何的可能性来动态定义方法的参数。 我知道另一种方式来使用class_eval但我知道不是定义与方法class_eval比慢得多define_method 。 我如何能有效的归档吗?
我没有在轨控制台一些基准:
class Foo; end
n = 100_000
Benchmark.bm do |x|
x.report('define_method') do
n.times { |i| Foo.send(:define_method, "method1#{i}", Proc.new { |a, b, c| a + b + c }) }
end
x.report('class_eval') do
n.times { |i| Foo.class_eval %Q{ def method2#{i}(a, b, c); a + b + c; end } }
end
end
所以,我已经得到了以下结果:
user system total real
define_method 0.750000 0.040000 0.790000 ( 0.782988)
class_eval 9.510000 0.070000 9.580000 ( 9.580577)