所有的对象都有标识和值。
标识(ID)用来表示对象同一性。Ruby中所有对象都是唯一的,对象的ID可以通过 (或者 )方法取得。
ary1 = []
ary2 = []
p ary1.object_id #=> 67653636p
ary2.object_id #=> 67650432
我们用 方法判断两个对象是否同一个对象(ID是否相同)
str1 = "foo"
str2 = str1str3="f"+"o"+"o"
p str1.equal?(str2) #=> truep str1.equal?(str3) #=> false
对象的“值”就是对象拥有的信息。例如,只要对象的字符串内容相等,Ruby就会认为对象的值相等。Ruby使用==来判断对象的值是否相等。
str1 = "foo"str2="f"+"o"+"o"
p str1 == str2 #=> true
除了==以外,Ruby还提供 方法用来判断对象的值是否相等。 与 都是 类定义的方法,大部分情况下它们的执行结果都是一样的。但也有例外,数值类会重定义 方法,因此执行后有不一样结果。
p 1.0 == 1 #=> true
p 1.0.eql?(1) #=> false
凭直觉来讲,把1.0与1判断为相同的值会更加方便。在一般情况进行值的比较时使用==,但是在一些需要进行更严谨的比较的程序中,就需要用到eql?方法。例如,0与0.0作为散列的键时,会判断为不同的键,这是由于散列对象内部的键比较使用了eql?方法来判断。
hash={0=>"0"}
p hash[0.0] #=> nilp hash[0] #=> "0"