Форма case specific when archetype...
всегда будет использовать проверку податливости archetype.===(specific)
.Чтобы использовать ==
, вам нужно быть явным и использовать другую форму: case when boolean
:
case
when a.class == A
puts "done"
else
puts "else"
end
Однако в этом конкретном случае (проверка, принадлежит ли объект в классе), есливам все равно, является ли a
экземпляром A
или экземпляром подкласса A
(что почти всегда так), вы все равно можете использовать проверку подстановки, например:
case a # Note: not a.class
when A
puts "done"
else
puts "else"
end
, потому что A === a
, когда A
является классом, во многом совпадает с a.is_a?(A)
.Обратите внимание, что это отличается от a.class == A
, который не будет истинным, если a
является экземпляром подкласса A
.Например, для class Dog < Animal
и fido = Dog.new
оба значения fido.instance_of?(Animal)
и fido.class == Animal
имеют значение false, но оба значения fido.is_a?(Animal)
и Animal === fido
имеют значение true.)