gpt4 book ai didi

ruby - EAFP 与 LBYL : Which is more idiomatic Ruby?

转载 作者:数据小太阳 更新时间:2023-10-29 07:52:05 28 4
gpt4 key购买 nike

虽然我可以找到很多关于 Python 的“EAFPLBYL”的资料,但我找不到任何关于 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com