k = Integer
case k
when Integer
"HI"
else "BYE"
end
在ruby 1.8中,评估结果为"BYE"
。我希望评估为"HI"
,Integer == Integer
评估为true
。 when
语句使用什么运算符?有什么我想念的吗?
答案 0 :(得分:4)
case
表达式使用===
子句中对象的when
运算符。所以评估为Integer === k
。这里的棘手问题是Class#===
基本上是以这种方式实现的:
class Class
def ===(obj)
obj.kind_of? self
end
end
这适用于可以接受同一参数中的许多类的方法,因此很容易测试参数的类型并对其进行适当处理。但正如你所看到的,这不是身份测试。所以它正在测试Integer是否是Integer的一个实例 - 它不是(它是Class的一个实例)。
根据您的确切用例,哈希可能更接近您的需求。