可能重复:
=== vs. == in Ruby
Fixnum == 2.class
#=> true
Fixnum === 2.class
#=> false
为什么===
不起作用?我怎么知道这个方法。===属于(现在我猜它会调用Object#==
或Object#===
),但我怎样才能确定?
答案 0 :(得分:4)
重复:
案例平等。请参阅Object#===的文档。此方法通常在Object
的子类中重写。例如,Module#===:
Case Equality - 如果anObject是mod的实例或mod的后代之一,则返回true。模块的用途有限,但可以在case语句中用于按类对对象进行分类。
>> Module.new === Module
=> false
>> Module === Module.new
=> true
Regexp#===是另一个,在这种情况下,它是=~
的同义词:
a = "HELLO"
case a
when /^[a-z]*$/; print "Lower case\n"
when /^[A-Z]*$/; print "Upper case\n"
else; print "Mixed case\n"
end
IRB中的一个例子:
>> "a" === /a/
=> false
>> /a/ === "a"
=> true
请记住,第一个返回false,因为您在===
上执行String
这不是一回事。在第二个示例中,我们正在===
Regexp
最后,Range非常好,它在Range对象上调用include?
并传递您的值:
>> (1..100) === 3
=> true
>> (1..100) === 300
=> false
有关这些内容的列表,请查看RubyDoc.info核心文档,并在左侧框架的方法区域中搜索===
答案 1 :(得分:0)
当====检查类型时,==通常只检查两个参数的值。