什麼是最佳實踐?要使用try
或使用rescue
?最佳實踐:嘗試與拯救
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
是否有使用任何這些有什麼區別?
什麼是最佳實踐?要使用try
或使用rescue
?最佳實踐:嘗試與拯救
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
是否有使用任何這些有什麼區別?
嘗試和營救服務不同的目的。的try
目的是爲了節省您不必做:
if user && user.email
或任何情況下的父對象都不可能是零,這將導致對NilClass一個NoMethodError。 rescue
的目的是處理由方法調用引發的異常。如果你期望有一個例外來自user.email
,那麼你可以用rescue nil
它來防止異常冒泡。
在一般情況下,我會說使用避免rescue nil
除非你明確地知道你正在搶救什麼異常,因爲你可以拯救一個不同的異常,你永遠不會知道,因爲rescue nil
會阻止你看到它。至少,也許你可以記錄它:
begin
...some code...
rescue => ex
logger.error ex.message
end
兩者都顯得魚腥味,可以掩蓋其他錯誤。你確定你真的想在那裏得到零嗎?也許最好先檢查是否有任何評論,並明確地覆蓋空案件?
Nothing is Something是三弟梅斯一個很好的談話,有助於理解爲什麼@AdamByrtek是當場上,爲什麼我們都應該標誌着失敗的案例在一個更聰明,更面向對象的方式x ? y : nil
非常感謝分享,但這應該是一個評論。 – Stefan 2015-08-13 15:12:02
好點,謝謝。下次會這樣做。這是我的第一反應,所以有點興奮:) – 2015-08-13 15:15:07
我希望這有一個鏈接到嘗試源。 – 2012-09-27 16:27:12
這裏是[文檔和源代碼](http://api.rubyonrails.org/classes/Object.html#method-i-try)到'ActiveSuppot#try'。 – 2012-11-20 06:28:54