gpt4 book ai didi

ruby - If 语句和 Case 语句 - 不匹配

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:42 25 4
gpt4 key购买 nike

为什么 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 语句使用 === 运算符而不是 ==,我该如何使用 == 作为 case 语句?

最佳答案

表格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是真的。)

关于ruby - If 语句和 Case 语句 - 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58090435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com