为什么我不能使用重载方法在define_method中调用super?

当我运行下面的代码时,它会引发错误:

不支持从define_method()定义的方法传递super的隐式参数。 明确指定所有参数。 (RuntimeError)。

我不确定是什么问题。

class Result def total(*scores) percentage_calculation(*scores) end private def percentage_calculation(*scores) puts "Calculation for #{scores.inspect}" scores.inject {|sum, n| sum + n } * (100.0/80.0) end end def mem_result(obj, method) anon = class << obj; self; end anon.class_eval do mem ||= {} define_method(method) do |*args| if mem.has_key?(args) mem[args] else mem[args] = super end end end end r = Result.new mem_result(r, :total) puts r.total(5,10,10,10,10,10,10,10) puts r.total(5,10,10,10,10,10,10,10) puts r.total(10,10,10,10,10,10,10,10) puts r.total(10,10,10,10,10,10,10,10) 

错误消息非常具有描述性。 当你在define_method块中调用它时,你需要显式地将参数传递给super

 mem[args] = super(*args)