在Odersky的書「編程在斯卡拉」第二版,第89頁第5.7節中,「==」運算符解釋爲:scala中的空值相等,odersky書的解釋看起來與scala代碼有所不同?
「正如你看到的,==已被精心雕琢,讓你在大多數情況下只需要進行相等比較就可以了,這是通過一個非常簡單的規則來實現的:首先檢查左側是否爲空,如果不爲空,則調用equals方法...由於存在自動空檢查,你沒有做自我檢查(7)」
然後注 「7」:
「自動檢查不看右側,但任何合理的equals方法應該返回false,如果它的參數爲null。」
如果空檢查沒有看RHS,我期待空==什麼東西只是總是評估爲false ...但我試了一下,並且null == null計算結果爲true。
本書基於scala 2.8。語言是否在某些時候發生了變化,或者我只是想念 - 理解這個解釋?
在我使用的drools引擎中,==被解釋爲如果LHS爲空,並且RHS不爲空,則來自RHS的equals方法將通過LHS。即使最合理的equals方法在空值上返回false,我也喜歡drools引擎處理這個的方式。在SQL中,我習慣了null!= null。