国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Ruby > 正文

Ruby中相等性判斷的4種方法

2020-02-24 15:38:50
字體:
供稿:網(wǎng)友

早就知道Ruby有四種判斷相等的方法,在普通程序中使用,但是缺乏深入的理解,今天,武林技術(shù)頻道小編帶你來學(xué)習(xí)Ruby中相等性判斷的4種方法,希望對(duì)你在程序生涯有幫助!

“==” 最常見的相等性判斷

“==” 使用最頻繁,它通常用于對(duì)象的值相等性(語義相等)判斷,在 Object 的方法定義中,“==” 比較兩個(gè)對(duì)象的 object_id 是否一致,通常子類都會(huì)重寫覆蓋這個(gè)方法,通過比較內(nèi)部值來判斷對(duì)象是否相等。

比如 ActiveRecord::Base 對(duì) “==” 的定義

?

復(fù)制代碼 代碼如下:

? def ==(comparison_object)
??? super ||
????? comparison_object.instance_of?(self.class) &&
????? id.present? &&
????? comparison_object.id == id
? end

?

通過 model 的 id 屬性比較兩個(gè) ActiveRecord::Base 實(shí)例是否相等。

“===” 用于 case 語句的相容判斷

“===” 主要用于 case 語句中對(duì)象的相容比較,看代碼比較容易理解。

復(fù)制代碼 代碼如下:

def what_is(obj)
? case obj
??? when /abc/
????? puts "include abc"
??? when 3..5
????? puts "in 3..5"
??? when Symbol
????? puts "It is a symbol"
??? else
????? puts "unkonwn"
? end
end

?

what_is("abcde") # =>? "include abc"
what_is(4)?????? # =>? "in 3..5"
what_is(:a)????? # =>? "It is a symbol"
what_is(100)???? # =>? "unknown"

?

case 背后是拿每一個(gè) when 后面的對(duì)象與 obj 進(jìn)行 === 方法計(jì)算比較,比如上面的代碼就是 分別求 /abc/.===(obj) , (3..5).===(obj) , Symbol.===(obj) 。

關(guān)鍵得看 === 方法里如何定義, Class 類中, === 定義為 obj.is_a?(klass),所以 case 可以現(xiàn)實(shí) obj 的類型判斷。

特別要注意的是和其他相等判斷不同 “===” 通常沒法交換,也就是很可能 a.===(b) != b.===(a) ,比如 /abc/ === "abcd" 為 true,但 "abcd" === /abc/ 為 false。

“equal?” 相同對(duì)象判斷

“equal?” 其實(shí)是最簡單的,但是也是最容易讓人搞混的判斷。說它簡單是因?yàn)檫@個(gè)方法的語義是比較兩個(gè)對(duì)象是否相同(是否有相同的 object_id),Object 的方法適用所有對(duì)象,不應(yīng)該對(duì)其重寫覆蓋。說它容易讓人搞混,是因?yàn)?ruby 和 java 中 “==” 和 “equal?” 方法的語義正好是相反的,ruby 中 “equal?” 表示對(duì)象引用相同,而 java 表示對(duì)象值相同。

“eql?” 對(duì)象 hash 值判斷

eql? 用于對(duì)象 hash 值判斷,如果兩個(gè)對(duì)象的 hash 值相等,就返回 true,否則返回 false。Object 的定義里,“eql?” 和 “==” 是等價(jià)的。通常可以把 “eql?” 看作比 “==” 更嚴(yán)格的相等,比如:

復(fù)制代碼 代碼如下:

1 == 1.0???? #=> true
1.eql? 1.0?? #=> false

Ruby中相等性判斷的4種方法就為各位朋友們介紹到這里了。想要學(xué)習(xí)更多的技術(shù)知識(shí),請(qǐng)繼續(xù)關(guān)注武林技術(shù)頻道吧!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 无锡市| 湖北省| 定南县| 鄂托克旗| 贡觉县| 乐业县| 宜丰县| 江都市| 衡阳县| 万荣县| 阳谷县| 乌拉特后旗| 富源县| 四子王旗| 洪洞县| 湖州市| 额济纳旗| 麻城市| 响水县| 上思县| 潮安县| 扎鲁特旗| 平陆县| 宁武县| 海伦市| 海丰县| 中西区| 青田县| 和林格尔县| 绵竹市| 岗巴县| 宜丰县| 贡山| 萨嘎县| 洛阳市| 桃园市| 勐海县| 岳西县| 潼关县| 鄂托克前旗| 堆龙德庆县|