当我将类 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)
的元数(如果已定义)?