2010-07-25 14 views
1

我厭倦了陷阱爲零時尋找一個從屬記錄當的時間返回0將很好地做。我爲自己創建了什麼樣的麻煩,通過在NilClass中添加「id」NilClass定義

class NilClass 
    def id 
    0 
    end 
end 

什麼是非預期後果?我知道存在嗎?(),但不知何故認爲這可能更清潔。

您的想法?

+1

所以......你認爲檢查「0」比檢查'零'更可取嗎? – 2010-07-25 22:53:18

+0

不要這樣做,請嘗試像奧馬爾建議的那樣。 – 2010-07-26 06:42:05

回答

1

如果你真的有這個問題,你應該在你的數據庫中使用參照完整性。

如果必須對nil調用可能會或可能不存在或拋出某種錯誤的方法,你應該使用支票一拉

> nil.id if nil 
=> nil 

Object#try(是的ActiveSupport的一部分,現在我相信?),被警告 - 我認爲這是一種代碼味道。

> nil.try(:id) 
=> nil 

話雖這麼說,它比修改NilClass做一些意想不到的,想到什麼新的開發誰必須對您的項目工作所期望的少了味道。

+0

「想到一個新開發人員需要爲您的項目工作。」傑出的問題! – Paul 2010-07-26 13:00:54

+0

奧馬爾 - 你指示我在正確的方向與對象#嘗試。我想我會在那些我更喜歡零到零的情況下做的事情是寫:「object.id.to_i」 – Paul 2010-07-26 13:16:10

+0

我很高興我在這裏幫了你,不過,我認爲真正的修復是參照完整性修復!這樣,除非你有一對一的關係,否則你不必處理不存在的對象。 – 2010-07-26 19:58:02

1

這是不是意味着您需要檢查「id == 0」以確認存在? 更不用說提供過多的基本Ruby功能帶來的意想不到的後果 - 當您陷入語言內部時,很難預測其他庫和核心Rails API的行爲。不是說它不會工作,但很難成爲當然

我會離開默認 - 它可以很好地工作,因爲Ruby允許「if object.association」表達式。

相關問題