[英]EAFP vs LBYL: Which is more idiomatic Ruby?
LB社區對LBYL或EAFP沒有整體偏好; 它在不同的習慣用法中都使用它們。
Ruby社區實際上並不使用術語LBYL或EAFP; 據我所知,它們僅用於Python社區。 但我們可以看看Ruby習語,看看它們是如何適合這些術語的。
當只有一種可能的異常情況時,Ruby幾乎總是使用LBYL,例如Array
索引超出范圍或未定義的Hash
密鑰。 在這些情況下返回nil
。 nil
是一個對象,在條件nil
被視為false,所以在Ruby中比在其他語言中檢查這些情況要少一些; 通過測試真實性或使用.try
可以簡潔地處理它們。
Ruby中幾乎從未見過的東西(除了它從先前存在的標准中冒出來的)是C樣式的LBYL模式,它返回一個超出范圍的值來表示異常情況,比如返回-1表示子字符串不是' t包含在一個字符串中。 返回nil
使得呼叫者更難以錯過特殊情況。
Ruby更有可能使用EAFP
只有在出現編程錯誤時才會出現問題,例如調用帶有錯誤數量的參數的方法或向不滿足方法預期接口的方法提供對象(即沒有正確的'鴨子類型')。 檢查這些情況並試圖優雅地處理它們是沒有意義的; 什么是正確的做法?
當有關於返回失敗的復雜信息時,例如File
操作或ActiveRecord save!
的許多方式save!
可能會失敗。
當raise
/ rescue
的遠程特性有用時,就像ActionController錯誤處理程序一樣。
在絕大多數Ruby程序中,這些樣式的相對性能不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.