💡
原文英文,约400词,阅读约需2分钟。
📝
内容提要
这段代码定义了一个自定义错误类和两个类,展示了异常处理机制。尽管子类有特定的异常处理,但实际输出是父类的标准错误,因为父类在子类之前捕获了异常,导致子类处理未执行。异常处理应考虑类层次结构,通用异常应在较低层次捕获,特定异常应靠近抛出位置处理。
🎯
关键要点
- 定义了一个自定义错误类 CustomError,继承自 StandardError。
- 创建了一个 Child 类,包含一个调用父类 Parent 的 raise_custom_error 方法的 #call 方法。
- 在 Child#call 和 Parent#raise_custom_error 中实现了异常处理。
- 实际输出是 'StandardError rescued',而不是预期的 'CustomError rescued'。
- Ruby 在遇到 raise 语句时,会查找调用栈中的匹配 rescue 子句。
- Parent#raise_custom_error 中的 rescue StandardError 捕获了 CustomError,导致 Child#call 中的 rescue CustomError 无法执行。
- 异常处理块的顺序和特异性与异常继承有关,父类的 rescue 块可能在子类之前捕获异常。
- 应在调用栈或继承层次结构的较低层次捕获更通用的异常,靠近抛出位置捕获更特定的异常。
➡️