2013-07-22 49 views
1

下面是alias_method的典型用法,爲什麼alias_method是一種實例方法?

class A 
def say 
    puts 'say'  
end 

alias_method :talk, :say 
end 

alias_method是在模塊類中定義的私人實例方法,但在上面的代碼中,它更像一個方法代替一個實例方法的,爲什麼上面的代碼工作?

+0

你已經使用了兩個月的計算器,問了三個問題,並沒有接受任何答案。如果您對迄今爲止的答案都沒有滿意,那沒問題,但如果答案中的任何一個都是正確的,請接受它們。 – sawa

回答

0

正如您正確注意到的那樣,它是一種類別方法A,同時也是Module類的一個實例方法,其中Class類是子類。類方法不是唯一的實例方法。所有類方法都是Class類的實例方法,除非它們是單例類中的方法。

在上例中,alias_method定義在Module類中。因此,作爲Module的實例的A可以是對alias_method的方法調用的接收者。但由於這種方法是私人的,接收器需要隱含。

+0

在Ruby中,每個類都是Class類的一個實例,在我的示例中,類A是Class的一個實例,並且因爲Module是Class的基類,那麼A就是Module的一個實例,是這樣嗎?如果這是真的,我可以理解爲什麼Module的私有實例方法成爲A的類方法。 還有一個問題:由於Object是Module的基類,因此所有Object的實例方法都將成爲類的類方法A,對嗎? – buaaji

+0

就是這樣。 – sawa

相關問題