好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Ruby里4種比較函數(equal?, eql?, ==, ===)詳解

Ruby里4種比較函數(equal?, eql?, ==, ===)詳解

熱門標簽:常德電銷平臺外呼系統軟件價格 電銷機器人廠商代理 湖州u友防封電銷卡 徐州網絡外呼系統哪個好 白銀外呼paas系統 滴滴外呼系統 百度地圖標注自定義圖片 地圖標注賺錢項目注冊 高德地圖標注客服

Ruby里面有4種比較方法,equal?, eql?, ==, ===,而且在不同的類里面表現的很不一樣。在使用的時候也特別容易搞糊涂。 這篇博文將演示一些代碼來講解各個方法。

== - 類意義上的 相等,需要每個類自己定義實現

在特定類中覺得兩個對象是否相同,需要看業務上的邏輯表象,所有由程序員覆蓋該方法的定義,決定兩個對象是否相同。

比如 String 類,他是來計較實際的文字串是否相同,而不在意是否來自同一個內存區域。

>> a = "abc"
#=> "abc"

>> b = a + ""
#=> "abc"

?> a == b
#=> true

>> a.object_id
#=> 70255156346640

>> b.object_id
#=> 70255156340640

=== - 用在 case 語句里時會調用的方法

通常用在 case 比較調用該方法,比如

case some_object
when /a regex/
 # The regex matches
when String
 # some_object is kind of String
when 2..4
 # some_object is in the range 2..4
when lambda {|x| some_crazy_custom_predicate }
 # the lambda returned true
end

等同于

if /a regex/ === some_object
 # The regex matches
elsif String === some_object
 # some_object is kind of object
elsif (2..4) === some_object
 # some_object is in the range 2..4
elsif lambda {|x| some_crazy_custom_predicate } === some_object
 # the lambda returned true
end

eql? - 通常意義上的 相等

如果兩個對象的值相同將返回 true,如果重新定義了子類的 == 方法,一般需要 alias 到 eql? 方法。 當然也有例外,整數與小數的比較兩個方法的返回值就不同。

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

eql? 用在 Hash 里面用來做成員值比較

[1] pry(main)> hash = Hash.new
#=> {}
[2] pry(main)> hash[2] = "a"
#=> "a"
[3] pry(main)> hash[2.0] = "b"
#=> "b"
[4] pry(main)> hash[2]
#=> "a"
[5] pry(main)> hash[2.0]
#=> "b"
[6] pry(main)> hash[2.00] = "c"
#=> "c"
[7] pry(main)> hash[2.0]
#=> "c"

所以什么時候應該覆蓋這個方法就看你想讓他在 Hash 比較時如何表現。

equal? - 內存地址相同的對象

該方法不應該被子類覆蓋
比較的是兩個對象在內存中是否相同,是否有同一個object_id值
Rails中及時相同的對象

q = User.first
 User Load (40.4ms) SELECT "users".* FROM "users"  ORDER BY "users"."id" ASC LIMIT 1
#=> #User id: 1, email: "ryan@wongyouth.com">

q2 = User.first
 User Load (0.4ms) SELECT "users".* FROM "users"  ORDER BY "users"."id" ASC LIMIT 1
#=> #User id: 1, email: "ryan@wongyouth.com">

q.equal? q2
#=> false

記憶方法

  1. == 按業務需求覆蓋該方法
  2. === 覆蓋 case 語句時的表現
  3. eql? 別名到 == 方法, 需要時覆蓋方法改變 Hash 比較時的表現
  4. equal? 不改動
您可能感興趣的文章:
  • Ruby實現命令行中查看函數源碼的方法
  • Ruby中的方法(函數)學習總結
  • Ruby中常用的字符串處理函數使用實例
  • ruby中的雙等號==問題詳解

標簽:荊門 三沙 梧州 張家界 遼寧 普洱 公主嶺 永州

巨人網絡通訊聲明:本文標題《Ruby里4種比較函數(equal?, eql?, ==, ===)詳解》,本文關鍵詞  Ruby,里,4種,比較,函數,equal,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ruby里4種比較函數(equal?, eql?, ==, ===)詳解》相關的同類信息!
  • 本頁收集關于Ruby里4種比較函數(equal?, eql?, ==, ===)詳解的相關信息資訊供網民參考!
  • 推薦文章