【发布时间】:2012-11-27 05:03:58
【问题描述】:
当我将 A 类实例上的方法委托给 $delegation_target 时,如下所示:
$delegation_target = ""
class A
def method_missing *args, ≺ $delegation_target.send(*args, &pr) end
def respond_to_missing? *args; $delegation_target.respond_to?(*args) end
end
A 实例上的方法的arity 返回-1,而与$delegation_target 上的方法的arity 无关:
def $delegation_target.foo; end
A.new.method(:foo).arity # => -1
def $delegation_target.foo arg1; end
A.new.method(:foo).arity # => -1
def $delegation_target.foo arg1, arg2; end
A.new.method(:foo).arity # => -1
def $delegation_target.foo arg1, arg2, arg3; end
A.new.method(:foo).arity # => -1
这个-1 来自哪里?而且,有没有办法让它对于任何可能的方法名称m,A.new.method(m).arity 返回$delegation_target.method(m) 的arity(如果已定义)?
【问题讨论】:
标签: ruby delegation method-missing arity