ruby捕获抛出与效率
Ruby中的catch意味着跳出深度嵌套的代码。例如,在Java中,Java的ruby捕获抛出与效率,ruby,performance,try-catch,throw,control-structure,Ruby,Performance,Try Catch,Throw,Control Structure,Ruby中的catch意味着跳出深度嵌套的代码。例如,在Java中,Java的try catch用于处理异常,可以实现同样的效果,但它被认为是糟糕的解决方案,效率也非常低。在Ruby中,我们有处理异常的begin-raise-rescue,我认为在其他任务中使用它也是非常昂贵的 Ruby的catch-throw真的是一个比begin-raise-rescue更有效的解决方案吗?或者是否有其他理由使用它来打破嵌套块而不是begin-raise-rescue?除了是摆脱结构控制的“正确”方式之外,c
try catch
用于处理异常,可以实现同样的效果,但它被认为是糟糕的解决方案,效率也非常低。在Ruby中,我们有处理异常的begin-raise-rescue
,我认为在其他任务中使用它也是非常昂贵的
Ruby的catch-throw
真的是一个比begin-raise-rescue
更有效的解决方案吗?或者是否有其他理由使用它来打破嵌套块而不是begin-raise-rescue
?除了是摆脱结构控制的“正确”方式之外,catch-throw
也明显更快(测试速度是我的10倍)。查看我的代码和结果。是正确的。我想添加更多关于抓球投掷
和提升救援
的信息
catch-throw
用于流量控制,而raise-rescue
用于异常/错误处理。不同的是:catch-throw
不需要backtrace
(流量控制).相信我,主要原因是raise-rescue
运行速度比catch-throw
慢10次,这是raise-rescue
创建backtrace
对象需要很多时间
如果要在无回溯的情况下提升,请使用以下语法:
raise <type>, <message>, <backtrace>
raise,
签出。raisewithbacktrace
比raisewithbacktrace
快得多
2016年4月更新:
我更新了:
- 固定的“中断”测试
- 为更新的ruby版本2.1.8、2.2.4、2.3.0添加了基准测试结果