У меня есть три объекта одного класса. Один был создан с помощью Item.new
, а два других были извлечены из базы данных (Mongoid). Я передаю один / любой из этих объектов другому методу и проверяю тип в этом методе через is_a?
:
def initialize (item, attrs = nil, options = nil)
super(attrs, options)
raise 'invalid item object' unless item.is_a?(Item)
Ну, этот рейз получил удар. Поэтому я проверяю класс is_a и instance_of в консоли rails. Я получаю противоречивые результаты. Почему у них одинаковые class
, но только один из них будет instance_of
, что class
?
>> i0.is_a? Item
=> false
>> i1.is_a? Item
=> false
>> i2.is_a? Item
=> true
>> i0.class
=> Item
>> i1.class
=> Item
>> i2.class
=> Item
>> i0.instance_of?(Item)
=> false
>> i1.instance_of?(Item)
=> false
>> i2.instance_of?(Item)
=> true
Есть ли лучший способ сделать эту проверку типов моих входов? Почему три вещи одного класса не все являются экземплярами этого класса?