簡體   English   中英

EAFP vs LBYL:哪個更慣用Ruby?

[英]EAFP vs LBYL: Which is more idiomatic Ruby?

雖然我可以在Python的“ EAFP vs. LBYL ”上找到很多,但我找不到Ruby的任何指南。 我自己的經驗是Ruby至少和Python一樣支持異常處理,但與整個社區相比,我自己的經驗是一個曇花一現。

那么哪種范式更慣用Ruby,EAFP或LBYL? 此外,是否有任何重大的性能問題需要考慮?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM