Ruby lamdba 相等性?
問(wèn)題描述
HI,以下是小弟的嘗試:
p=lambda {|x| x*x}q=p.dupputs q==p #out falseputs p.object_idputs q.object_id
為什么是false呢?
問(wèn)題解答
回答1:版本問(wèn)題。
你的這本書(shū)應(yīng)該比較老了,用的 Ruby 版本是 2.0 之前的。從 Ruby 2.0 開(kāi)始,Proc#== 的行為發(fā)生了變化:
從 Ruby 2.0 開(kāi)始,Two procs are == only when they are the same object.只有當(dāng)兩個(gè) proc 是同一對(duì)象時(shí),== 才返回 true。
參考:
https://bugs.ruby-lang.org/issues/4559
https://github.com/ruby/ruby/blob/f031aec4233d7a6d4622c048abed3e86eb5dd6c2/NEWS#L127-130
回答2:看了一下ruby的官方文檔,lambda 實(shí)際就是 Proc, Proc并沒(méi)有重載自己的 ==方法,調(diào)用的是BasicObject的 == 方法
Equality — At the Object level, == returns true only if obj and other are the same object(Objec層次比較對(duì)象的方法是判斷是否是相同的對(duì)象).Typically, this method is overridden in descendant classes to provide class-specific meaning.
Proc
查看Proc的基類就可以看到繼承自O(shè)bject,然后Object繼承自BasicObject
相關(guān)文章:
1. mysql - 10g數(shù)據(jù)庫(kù)如何遷移2. php - 有關(guān)sql語(yǔ)句反向LIKE的處理3. 在視圖里面寫(xiě)php原生標(biāo)簽不是要迫不得已的情況才寫(xiě)嗎4. 獲取上次登錄ip的原理是啥?5. node.js - session怎么存到cookie,然后服務(wù)器重啟后還能獲取。數(shù)據(jù)庫(kù)不用mongodb或redis,數(shù)據(jù)庫(kù)是mysql6. 求救一下,用新版的phpstudy,數(shù)據(jù)庫(kù)過(guò)段時(shí)間會(huì)消失是什么情況?7. 為什么說(shuō)非對(duì)象調(diào)用成員函數(shù)fetch()8. fetch_field_direct()報(bào)錯(cuò)9. 為什么點(diǎn)擊登陸沒(méi)反應(yīng)10. mysql多表聯(lián)合查詢優(yōu)化的問(wèn)題
