我有一個看起來像這樣捕獲錯誤在Ruby中
if not @user.verified? or @user.credit_card.expired?
# do stuff
end
問題出在哪裏了@user
還沒有信用卡,因爲expired?
將提高,因爲零值的異常的情況說明。
有沒有一種簡潔的方式來捕捉錯誤內聯,而不必訴諸額外的if語句?
我有一個看起來像這樣捕獲錯誤在Ruby中
if not @user.verified? or @user.credit_card.expired?
# do stuff
end
問題出在哪裏了@user
還沒有信用卡,因爲expired?
將提高,因爲零值的異常的情況說明。
有沒有一種簡潔的方式來捕捉錯誤內聯,而不必訴諸額外的if語句?
爲了避免這種例外,您可以使用Rails的2.3/3內置的方法:try
if not @user.verified? or @user.credit_card.try(:expired?)
# do stuff
end
andand當且僅當對象不爲空時,gem允許保護方法調用。
您的代碼段是這樣的:
if not @user.verified? or @user.credit_card.andand.expired?
# do stuff
end
你可以用gem install andand
安裝它,你是好去。
代碼
@user.credit_card.expired?
將被稱爲違反Law of Demeter。該法律規定您可以在@user
上撥打任何您喜歡的方式,但不能撥打@user.credit_card
。
首先檢查空嗎?即ie if user.credit_card.exists? – zengr 2011-01-12 08:19:28