If 语句和 Case 语句 - 不匹配

  • 本文关键字:语句 不匹配 If Case ruby
  • 更新时间 :
  • 英文 :


为什么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

但是,在这种特定情况下(检查对象是否属于类(,如果您不关心aA的实例还是A子类的实例(几乎总是如此(,您仍然可以使用包含检查,如下所示:

case a         # Note: not a.class
when A
puts "done"
else
puts "else"
end

因为A === aA是一个类时,a.is_a?(A)几乎是一样的。请注意,这与a.class == A不同,如果aA子类的实例,则 将不成立。例如,对于class Dog < Animalfido = Dog.newfido.instance_of?(Animal)fido.class == Animal都是假的,但fido.is_a?(Animal)Animal === fido都是真的。

最新更新