所有的對(duì)象都有標(biāo)識(shí)和值鲫趁。
標(biāo)識(shí)(ID)用來表示對(duì)象同一性歪今。Ruby中所有對(duì)象都是唯一的铣猩,對(duì)象的ID可以通過 (或者 )方法取得怎虫。
ary1 = []
ary2 = []
p ary1.object_id #=> 67653636p
?ary2.object_id #=> 67650432
我們用 方法判斷兩個(gè)對(duì)象是否同一個(gè)對(duì)象(ID是否相同)
str1 = "foo"
str2 = str1str3="f"+"o"+"o"
p str1.equal?(str2) #=> truep str1.equal?(str3) #=> false
對(duì)象的“值”就是對(duì)象擁有的信息。例如膳音,只要對(duì)象的字符串內(nèi)容相等召衔,Ruby就會(huì)認(rèn)為對(duì)象的值相等。Ruby使用==來判斷對(duì)象的值是否相等祭陷。
str1 = "foo"str2="f"+"o"+"o"
p str1 == str2 #=> true
除了==以外苍凛,Ruby還提供 方法用來判斷對(duì)象的值是否相等。 與 都是 類定義的方法兵志,大部分情況下它們的執(zhí)行結(jié)果都是一樣的醇蝴。但也有例外,數(shù)值類會(huì)重定義 方法想罕,因此執(zhí)行后有不一樣結(jié)果悠栓。
p 1.0 == 1 #=> true
p 1.0.eql?(1) #=> false
憑直覺來講,把1.0與1判斷為相同的值會(huì)更加方便按价。在一般情況進(jìn)行值的比較時(shí)使用==惭适,但是在一些需要進(jìn)行更嚴(yán)謹(jǐn)?shù)谋容^的程序中,就需要用到eql?方法楼镐。例如腥沽,0與0.0作為散列的鍵時(shí),會(huì)判斷為不同的鍵鸠蚪,這是由于散列對(duì)象內(nèi)部的鍵比較使用了eql?方法來判斷。
hash={0=>"0"}
p hash[0.0] #=> nilp hash[0] #=> "0"