比较2个对象时,==和===之间有什么区别

时间:2011-06-27 13:46:00

标签: ruby

  

可能重复:
  === vs. == in Ruby

Fixnum == 2.class 
#=> true

Fixnum === 2.class
#=> false

为什么===不起作用?我怎么知道这个方法。===属于(现在我猜它会调用Object#==Object#===),但我怎样才能确定?

2 个答案:

答案 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)

当====检查类型时,==通常只检查两个参数的值。