Ruby 中 throw 和 catch 的用法?

· 约 3 分钟读完 · 第 96 / 199 章

推荐答案

在 Ruby 中,throw 和 catch 用于非局部控制流的跳转。它们通常用于在嵌套的代码块中跳出多层循环或条件语句。catch 定义一个标签,throw 则用于跳转到该标签处。

输出:

本题详细解读

catch 和 throw 的基本用法

catch 和 throw 是 Ruby 中用于控制流程的特殊机制。catch 定义一个标签,throw 则用于跳转到该标签处。catch 块中的代码会正常执行,直到遇到 throw,此时控制流会立即跳转到 catch 块的末尾,并且 catch 块会返回 throw 的第二个参数(如果有的话)。

catch 和 throw 的语法

  • catch(:label) { ... }:定义一个标签为 :label 的 catch 块。
  • throw(:label, value):跳转到标签为 :label 的 catch 块,并返回 value。

catch 和 throw 的应用场景

catch 和 throw 通常用于以下场景:

  1. 跳出多层嵌套循环:当需要从多层嵌套的循环中跳出时,可以使用 catch 和 throw 来简化代码。
  2. 错误处理:在某些情况下,可以使用 catch 和 throw 来处理错误或异常情况,而不必使用 raise 和 rescue。

注意事项

  • catch 和 throw 并不是异常处理机制,它们只是用于控制流程的跳转。
  • throw 必须与 catch 配合使用,否则会抛出 UncaughtThrowError 异常。
  • catch 和 throw 的标签可以是任意对象,但通常使用符号(Symbol)作为标签。

示例代码解析

在示例代码中,catch(:done) 定义了一个标签为 :done 的 catch 块。在 5.times 循环中,当 i 等于 3 时,throw :done, "Exited at i = #{i}" 会跳转到 catch 块的末尾,并返回字符串 "Exited at i = 3"。因此,puts result 会输出 Exited at i = 3。