if语句有效,但该case语句无效?class A
end # => nil
a= A.new # => #<A:0x00007fd9d6134770>
Run Code Online (Sandbox Code Playgroud)
If 陈述作品a.class == A # => true
Run Code Online (Sandbox Code Playgroud)
Case 声明不起作用case a.class # => A
when A
puts "done"
else
puts "else" # => nil
end # => nil
# >> else
Run Code Online (Sandbox Code Playgroud)
我读过case语句使用===运算符,而不是==,如何使用==case语句?
该表格case specific when archetype...将始终使用archetype.===(specific)归类检查。要使用==,您需要明确,并使用其他形式case when boolean:
case
when a.class == A
puts "done"
else
puts "else"
end
Run Code Online (Sandbox Code Playgroud)
但是,在这种特定情况下(检查对象是否属于一个类),如果您不在乎a是的实例A还是子类的实例A(几乎总是这样),则仍然可以使用该引用检查,像这样:
case a # Note: not a.class
when A
puts "done"
else
puts "else"
end
Run Code Online (Sandbox Code Playgroud)
因为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。)