2014-11-25 62 views

回答

6

您可以使用UnboundMethod#owner方法來檢查在方法的實現:

class A 
    def method_missing(*args) 
    # do something 
    end 
end 
method = A.instance_method(:method_missing) 
method.owner 
# => A 

注意:如果方法在模塊(後混入類層次結構某處)來實現,owner將返回該模塊。

+0

@張開宇有幫忙嗎? – 2014-11-25 08:43:35

+0

很好的答案。糾正我,如果我錯了,但我認爲你可以停止'方法',它返回'#'(假設它只是爲了調試,你不需要在代碼本身返回的類)。 – 2014-11-25 09:20:03

+0

不,'A.method(:method_missing)'返回表示'BasicObject#method_missing'的Method'實例,而不是'A#method_missing'。這是因爲'A#method_missing'被實現爲實例方法,而不是類方法。 – 2014-11-25 09:23:10

相關問題