- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
虽然我可以找到很多关于 Python 的“EAFP 与 LBYL”的资料,但我找不到任何关于 Ruby 的指南。我自己的经验是,Ruby 至少和 Python 一样支持异常处理,但与整个社区相比,我自己的经验只是九牛一毛。
那么,哪种范式更符合 Ruby、EAFP 或 LBYL 的习惯呢?此外,是否有任何重要的性能问题需要考虑?
最佳答案
Ruby 社区对 LBYL 或 EAFP 没有总体偏好;它在不同的惯用情况下同时使用。
Ruby 社区实际上并不使用术语 LBYL 或 EAFP;据我所知,它们仅在 Python 社区中使用。但是我们可以看看 Ruby 习语,看看它们如何符合这些术语。
Ruby 几乎总是在只有一种可能的异常情况下使用 LBYL,例如 Array
索引越界或未定义的 Hash
键。 nil
在这些情况下返回。 nil
是一个对象,在条件语句中被视为 false,因此在 Ruby 中检查这些情况比在其他一些语言中更容易;可以通过测试真实性或使用 .try
来简洁地处理它们。
在 Ruby 中几乎从未见过的(除了它从先前存在的标准中冒出来的地方)是 C 风格的 LBYL 模式,它返回一个超出范围的值来指示异常情况,比如返回 -1 来指示一个子字符串不包含在字符串中。返回 nil
使调用者更难错过异常情况。
Ruby 更倾向于使用 EAFP
仅当存在编程错误时某些事情才会失败,例如使用错误数量的参数调用方法或向不满足方法预期接口(interface)的方法提供对象(即不'有正确的'鸭子类型')。检查这些情况并尝试优雅地处理它们是没有意义的;什么是正确的做法?
当有关于返回失败的复杂信息时,例如 File
操作或 ActiveRecord save!
可能失败的多种方式。
当 raise
/rescue
的长距离特性有用时,如在 ActionController 错误处理程序中。
在绝大多数 Ruby 程序中,这些样式的相对性能不是问题。
关于ruby - EAFP 与 LBYL : Which is more idiomatic Ruby?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36583258/
我对“Maybe”和“Either”类型以及它们与 EAFP(更容易请求原谅许可)的假设关系存有疑问。我使用过 Python 并习惯于在异常世界中使用 EAFP 范式。 经典示例:除以零 def fu
我是 Python 新手,正在尝试了解 Python 方式® 我了解了 EAFP 原则并且喜欢它,但是在这个示例中如何应用它? 编辑:我只关心item没有children属性,而不关心dosometh
在 Python 中编写并发/多线程代码时,遵循“请求宽恕比请求许可更容易”(EAFP)而不是“三思而后行”(LBYL)是否特别重要? Python 异常动态的特性意味着几乎任何事情(例如,属性删除)
在一般情况下和下一个示例中,请求宽恕而不是许可是 Java 的一种好习惯吗? 例子是: try { Cell value = array2D[rowIndex][columnIndex]; }
在几个地方(here 和 here)有人说 Python 强调“请求宽恕比请求许可更容易”(EAFP)应该用异常只应该真正调用的想法来缓和异常(exception)情况。考虑以下情况,我们在优先级队列
虽然我可以找到很多关于 Python 的“EAFP 与 LBYL”的资料,但我找不到任何关于 Ruby 的指南。我自己的经验是,Ruby 至少和 Python 一样支持异常处理,但与整个社区相比,我自
我是一名优秀的程序员,十分优秀!