在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
那么,我在哪里可以了解有关==
的更多信息?当我将两个对象与它进行比较时,我应该期待什么样的检查?
答案 0 :(得分:8)
答案 1 :(得分:1)
在这种情况下,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不是同一个对象并且相等?比较对象,而不是对象的值。