在Ruby中==做什么?

时间:2010-08-02 17:27:48

标签: ruby equals

在Java中,==是最强的相等(指针相等):a == b始终隐含a.equals(b)。但是,在Ruby中,==弱于.equals?

ruby-1.9.2-rc2 > 17 == 17.0
 => true 
ruby-1.9.2-rc2 > 17.equal?(17.0)
 => false

那么,我在哪里可以了解有关==的更多信息?当我将两个对象与它进行比较时,我应该期待什么样的检查?

4 个答案:

答案 0 :(得分:8)

简要地说,这是你需要知道的:

==比较检查两个值是否相等

eql?检查两个值是否相等且类型相同

equal?检查两件事是否是同一个对象。

关于此的好博客是here

答案 1 :(得分:1)

实际上,它们只是方法 ==表示 对象。==(other_object) 等于?手段 的Object.Equals?(other_object)

在这种情况下,equals基本上用于哈希查找比较 即 a_hash [1]不应与a_hash [1.0]

具有相同的键值对

HTH。 -r

答案 2 :(得分:1)

简单地说,

==是一种方法。我认为它的解释非常好here

  
    

通常,在后代类中重写此方法以提供特定于类的含义。

  

以及Numeric s。

的示例

但这里存在一个陷阱:由于==是左操作数的一种方法,因此假设a==b的结果应与{{1}的结果相同并不总是安全的}。特别是在b==a是一个方法调用的情况下,在Ruby等动态语言中,它不能总是返回相同类型的值。

答案 3 :(得分:0)

jruby-1.5.0 > 17 ==17
 => true 
jruby-1.5.0 > 17 == 17.0
 => true 
jruby-1.5.0 > 17 === 17.0
 => true 
jruby-1.5.0 > 17.equal?(17.0)
 => false 
jruby-1.5.0 > 17.id
 => 35 
jruby-1.5.0 > (17.0).id
(irb):12 warning: Object#id will be deprecated; use Object#object_id
 => 2114 

红宝石中的一切都是一个对象。对象17与17.0不是同一个对象并且相等?比较对象,而不是对象的值。