为什么课堂比较不起作用?

时间:2016-06-27 10:18:18

标签: ruby

一般来说,可以像这样比较两个类

x = "String"
puts "A string" if x.class == String

但是,当case像这样使用时,

x = "String"
case x.class
  when String
    puts "A string"
end

它不起作用。为什么呢?

更新

在以下情况中,

x = "String"
case x
  when String
    puts "A string"
end

它有效。这是否意味着,case隐式地将类转换为字符串?

2 个答案:

答案 0 :(得分:1)

您必须删除x

上的.class方法
x = "String"
case x
  when String
    puts "A string"
end

答案 1 :(得分:1)

通过使用===运算符将when子句中的对象与case子句中的对象进行比较来完成比较。该运算符按预期使用文字,但不使用类。这意味着如果你想对一个对象的类进行case ... when,这将无效。

>> 1 === 1
=> true
>> 1.class === 1.class
=> false

this answer

中,在===实例上使用Class的一个很好的解释和一个小小的展示