2013-07-22 5 views
1

Ниже приводится типичное использование alias_method,Почему alias_method - это метод экземпляра?

class A 
def say 
    puts 'say'  
end 

alias_method :talk, :say 
end 

alias_method является частным экземпляр метод, определенный в классе модуля, но в коде выше, это больше похоже на метод класса вместо экземпляра метода , почему этот код работает?

+0

Вы использовали stackoverflow в течение двух месяцев, задали три вопроса и не получили никаких ответов. Если вы до сих пор не удовлетворены ни одним из ответов, это нормально, но если какой-либо ответ верен, пожалуйста, примите их. – sawa

ответ

0

Это метод класса A, который вы правильно заметили и в то же время является методом экземпляра класса Module, из которых класс Class является подклассом. Методы класса не являются исключительными для методов экземпляра. Все методы класса - это методы экземпляра класса Class, если они не являются методами одного класса.

В приведенном выше примере alias_method определен на классе Module. Таким образом, A, который является экземпляром Module, может быть получателем вызова метода до alias_method. Но поскольку этот метод является конфиденциальным, приемник должен подразумевать.

+0

В Ruby каждый класс является экземпляром класса Class, в моем примере класс A является экземпляром класса, а поскольку Module является базовым классом класса, то A является экземпляром модуля, это правда? Если это так, я могу понять, почему метод частного экземпляра модуля становится методом класса A. Еще один вопрос: поскольку Object является базовым классом модуля, поэтому все методы экземпляра объекта станут классами класса класса А, да? – buaaji

+0

Именно так. – sawa

Смежные вопросы