为什么if
语句有效,而case
语句不起作用?
class A
end # => nil
a= A.new # => #<A:0x00007fd9d6134770>
If
语句有效
a.class == A # => true
Case
语句不起作用
case a.class # => A
when A
puts "done"
else
puts "else" # => nil
end # => nil
# >> else
我读到案例陈述使用===
运算符而不是==
,我如何在案例陈述中使用==
?
表单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
都是假的,但fido.is_a?(Animal)
和Animal === fido
都是真的。