我最近进入了一个关于raise
vs.的讨论throw
。还有另一个 SO 线程在讨论这个问题,专家们将情况总结为:
- Throw 和 raise 在很大程度上是可以互换的
- 的优点
throw
是您可以轻松地抛出任何东西,并且您不会浪费时间将堆栈跟踪放在一起
这给我留下了一个问题,为什么没有人真正在 Ruby 中使用 throw?前面讨论的线程提到了在 Sinatra 中使用 catch/throw 来处理 HTTP 错误代码,但是,我仍然很少看到野外的 catch/throw 示例,而且我只在自己的代码中使用过一次。正如当前的 Rails 安全危机所表明的那样,Ruby 社区普遍忽视了重要的特性(在这种特殊情况下为 $SAFE 级别)。那么catch/throw是怎么回事?