2009-05-06 4 views
40

В чем разница между методами класса и типа в Ruby? Я заметил, что тип работает, чтобы найти тип некоторых классов, но не другие.class() vs. type() в Ruby

ответ

48

Главное отличие состоит в том, что Object#type устарел. Из RDoc для объекта # type:

Устаревший синоним класса Object #.

Вот почему вы должны использовать Object#class:

Возвращает класс OBJ, теперь предпочтительный над Object # типа, как и введите объекта в Ruby, только слабо привязано к этому объекту класс. Этот метод всегда должен вызываться с явным приемником , поскольку класс также является зарезервированным словом в Ruby.

В действительности вы, вероятно, захотите использовать Object#respond_to? вместо проверки класса объекта в большинстве случаев.

+0

Если это синоним, почему бы мне получить неопределенную ошибку метода, когда я вызываю тип в классе, который я сам определил? Но то же самое не происходит, когда я вызываю метод класса для того же класса. неопределенная ошибка метода не похожа на то, что вы получили бы для устаревшего метода. –

+0

@ Крис Коллинз, моя догадка заключается в том, что документ выключен, и что это не строгий синоним. Точка остается тем, что тип объекта # - метод без использования. – runako

+4

Зачем использовать response_to? –

15

#type является синонимом для #class, но он устарел в рубине 1.8 и, по-видимому, ушел от рубина 1.9. Просто используйте #class всюду.

 

# For ruby 1.8 

$ ri Object#type 
------------------------------------------------------------ Object#type 
    obj.type => class 
------------------------------------------------------------------------ 
    Deprecated synonym for Object#class. 


# For ruby 1.9 

$ ri1.9 Object#type 
Nothing known about Object#type 
+0

Если это синоним, почему бы мне получить неопределенную ошибку метода при вызове типа в классе, который я сам определил? Но то же самое не происходит, когда я вызываю метод класса для того же класса. неопределенная ошибка метода не похожа на то, что вы получили бы для устаревшего метода. –

+0

Вы на рубине 1.9? На ruby ​​1.8 я не получаю сообщение об ошибке, просто предупреждение об утомлении. – kch

+0

И если вы на рубине 1.9, ну, усталость означает, что он будет удален, когда, и выглядит как 1.9, это когда. – kch