虽然我可以在 Python 中找到大量关于“EAFP vs. LBYL”的内容,但我找不到任何适用于 Ruby 的指南。我的经验是,Ruby 至少和 Python 一样支持异常处理,但与整个社区相比,我的经验微不足道。
那么,哪种范式更符合 Ruby 的习惯用语,EAFP 还是 LBYL?此外,是否有任何重要的性能问题需要考虑?
那么,哪种范式更符合 Ruby 的习惯用语,EAFP 还是 LBYL?此外,是否有任何重要的性能问题需要考虑?
Array
索引超出范围或未定义的Hash
键等情况,Ruby几乎总是使用LBYL,返回nil
。在条件中,nil
被视为false,因此在Ruby中检查这些情况比其他一些语言更容易处理;可以通过测试真实性或使用.try
来简洁地处理它们。nil
使调用者更难忽略异常条件。仅当存在编程错误时才会失败,例如用错误数量的参数调用方法或向不满足方法所需接口(即没有正确的“鸭子类型”)的方法提供对象。检查这些情况并试图优雅地处理它们没有意义;那么应该做什么是正确的?
当存在有关失败的复杂信息时,例如File
操作或ActiveRecord save!
可能失败的多种方式。
当raise
/rescue
的远程性质有帮助时,如ActionController错误处理程序。