第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

equ?,eql?,===和==之間有什么區(qū)別?

equ?,eql?,===和==之間有什么區(qū)別?

絕地?zé)o雙 2019-07-27 14:52:26
equ?,eql?,===和==之間有什么區(qū)別?我試圖理解這四種方法之間的區(qū)別。我知道默認(rèn)情況下==調(diào)用的方法equal?在兩個(gè)操作數(shù)引用完全相同的對(duì)象時(shí)返回true。===默認(rèn)情況下也會(huì)調(diào)用==哪個(gè)調(diào)用equal?...好吧,如果所有這三個(gè)方法都沒有被覆蓋,那么我想===,==并equal?做同樣的事情?現(xiàn)在來了eql?。這是做什么的(默認(rèn)情況下)?它是否調(diào)用操作數(shù)的hash / id?為什么Ruby有這么多的平等標(biāo)志?他們應(yīng)該在語義上有所不同嗎?
查看完整描述

3 回答

?
慕的地8271018

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊

我將在這里大量引用Object文檔,因?yàn)槲艺J(rèn)為它有一些很好的解釋。我鼓勵(lì)你閱讀它,以及這些方法的文檔,因?yàn)樗鼈冊(cè)谄渌愔斜桓采w,比如String。

旁注:如果您想在不同的對(duì)象上嘗試這些,請(qǐng)使用以下內(nèi)容:

class Object
  def all_equals(o)
    ops = [:==, :===, :eql?, :equal?]
    Hash[ops.map(&:to_s).zip(ops.map {|s| send(s, o) })]
  endend"a".all_equals "a" # => {"=="=>true, "==="=>true, "eql?"=>true, "equal?"=>false}

== - 通用“平等”

在Object級(jí)別,==僅當(dāng)objother是同一對(duì)象時(shí)才返回true 。通常,在子類中重寫此方法以提供特定于類的含義。

這是最常見的比較,因此是您(作為一個(gè)類的作者)決定兩個(gè)對(duì)象是否“相等”的最基本的地方。

=== - 案件平等

對(duì)于類Object,實(shí)際上與調(diào)用相同#==,但通常由后代重寫,以在case語句中提供有意義的語義。

這非常有用。有趣===實(shí)現(xiàn)的事情的例子:

  • 范圍

  • 正則表達(dá)式

  • Proc(在Ruby 1.9中)

所以你可以這樣做:

case some_objectwhen /a regex/
  # The regex matcheswhen 2..4
  # some_object is in the range 2..4when lambda {|x| some_crazy_custom_predicate }
  # the lambda returned trueend

請(qǐng)參閱我的答案,以獲得一個(gè)簡潔的例子,說明caseRegex如何使代碼更清晰。當(dāng)然,通過提供自己的===實(shí)現(xiàn),您可以獲得自定義case語義。

eql?Hash平等

eql?如果obj并且other引用相同的散列鍵,則該方法返回true 。這用于Hash測試成員是否相等。對(duì)于類的對(duì)象Object,eql?是同義詞==子類通常通過eql?對(duì)其重寫==方法進(jìn)行別名來繼續(xù)這種傳統(tǒng),但也有例外。Numeric例如,類型執(zhí)行跨越==但不跨越的類型轉(zhuǎn)換eql?,因此:

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

因此,您可以自由地覆蓋它以供自己使用,或者您可以覆蓋==和使用,alias :eql? :==因此這兩種方法的行為方式相同。

equal? - 身份比較

與此不同==,該equal?方法永遠(yuǎn)不應(yīng)被子類覆蓋:它用于確定對(duì)象標(biāo)識(shí)(即a.equal?(b)iff a與其相同的對(duì)象b)。

這實(shí)際上是指針比較。


查看完整回答
反對(duì) 回復(fù) 2019-07-27
  • 3 回答
  • 0 關(guān)注
  • 1103 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)