gpt4 book ai didi

ruby - 有没有其他方法可以为 Ruby 挽救 LoadError?

转载 作者:数据小太阳 更新时间:2023-10-29 06:50:03 27 4
gpt4 key购买 nike

我阅读了博文 JRuby Performance: Exceptions are not flow control提倡在特殊情况下避免使用异常。

我意识到我犯了定期使用 rescue 处理 LoadErrors 的错误。

是否有 require 的替代方案,如果文件存在则尝试加载文件,但如果不存在则不抛出异常?

背景:如果您想知道“为什么您的要求不是绝对要求?”,这是我的故事:

  1. 当我为 Ruby 1.8 编程时,我使用了 require "rdoc/usage" 以便在我没有在命令行应用程序中输入正确数量的参数时提供使用信息.这会在开箱即用的 1.9 上引发异常。
  2. 当我的应用程序在我的 Windows 桌面上运行时,我的部分应用程序涉及操作 win32ole 的代码。如果涉及的文件在执行繁重计算工作的 Linux 服务器下运行,这会导致 LoadError。使用 win32ole 的文件还有在我的测试套件中测试的其他代码,因此在 Linux 下运行我的测试套件时,我必须需要这些文件。我应该拆分这些文件,但这看起来有点像剃牦牛毛。

最佳答案

计算机程序几乎所有时间都在循环中度过。如果您在一个内部循环中反复引发和拯救异常,而该循环在您的程序执行期间执行了数百万次,那么您可能确实存在性能问题。但是加载文件通常只在程序初始化期间完成。如果您在程序启动期间引发并挽救一些异常,对性能的影响将非常接近于零,任何人都不会注意到。

顺便说一句,如果你有一个真正对性能敏感的方法(即执行多次),但你确实想要一个“goto”,它允许你跳出多个 block 甚至调用堆栈(如异常),使用 throwcatch。它们类似于 raiserescue,但速度更快。引发异常的大部分性能成本来自填充堆栈跟踪,而 throw 不会这样做。

恕我直言,开始;要求 ”...”; rescue LoadError 是惯用的 Ruby,无论如何都不应被视为不好的做法,无论人们怎么说“使用异常进行流量控制”。如果您的脚本通常在 Windows 上执行,那么在 Linux 上运行可以被正确地视为“异常情况”,并且值得使用异常。一般来说,如果您要加载的文件不存在,那就是“异常情况”——这就是 require 首先引发异常的原因!

昂起你的头,伙计!不要让仇恨者让您因为使用简单、符合常识的代码而感到内疚!

关于ruby - 有没有其他方法可以为 Ruby 挽救 LoadError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6405906/

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