В чем разница между методами класса и типа в Ruby? Я заметил, что тип работает, чтобы найти тип некоторых классов, но не другие.class() vs. type() в Ruby
ответ
Главное отличие состоит в том, что Object#type
устарел. Из RDoc для объекта # type:
Устаревший синоним класса Object #.
Вот почему вы должны использовать Object#class
:
Возвращает класс OBJ, теперь предпочтительный над Object # типа, как и введите объекта в Ruby, только слабо привязано к этому объекту класс. Этот метод всегда должен вызываться с явным приемником , поскольку класс также является зарезервированным словом в Ruby.
В действительности вы, вероятно, захотите использовать Object#respond_to?
вместо проверки класса объекта в большинстве случаев.
#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
Если это синоним, почему бы мне получить неопределенную ошибку метода при вызове типа в классе, который я сам определил? Но то же самое не происходит, когда я вызываю метод класса для того же класса. неопределенная ошибка метода не похожа на то, что вы получили бы для устаревшего метода. –
Вы на рубине 1.9? На ruby 1.8 я не получаю сообщение об ошибке, просто предупреждение об утомлении. – kch
И если вы на рубине 1.9, ну, усталость означает, что он будет удален, когда, и выглядит как 1.9, это когда. – kch
Если это синоним, почему бы мне получить неопределенную ошибку метода, когда я вызываю тип в классе, который я сам определил? Но то же самое не происходит, когда я вызываю метод класса для того же класса. неопределенная ошибка метода не похожа на то, что вы получили бы для устаревшего метода. –
@ Крис Коллинз, моя догадка заключается в том, что документ выключен, и что это не строгий синоним. Точка остается тем, что тип объекта # - метод без использования. – runako
Зачем использовать response_to? –