推荐答案
在 Ruby 中,自定义异常类可以通过继承 StandardError 或其子类来实现。以下是一个简单的示例:
// www.javascriptcn.com code example
class CustomError < StandardError
def initialize(message = "This is a custom error")
super(message)
end
end
# 使用自定义异常
begin
raise CustomError, "Something went wrong"
rescue CustomError => e
puts "Caught custom error: #{e.message}"
end本题详细解读
1. 自定义异常类的基本结构
在 Ruby 中,所有的异常类都是 Exception 类的子类。通常情况下,自定义异常类应该继承自 StandardError,因为 StandardError 是 Ruby 中大多数内置异常的基类。继承自 StandardError 的异常可以被 rescue 捕获,而不会捕获到系统级别的异常(如 NoMemoryError)。
2. 自定义异常类的初始化
自定义异常类可以像普通类一样定义初始化方法 initialize。在这个方法中,你可以传递一个错误消息,并通过 super 方法将其传递给父类的 initialize 方法。
class CustomError < StandardError
def initialize(message = "This is a custom error")
super(message)
end
end3. 抛出和捕获自定义异常
你可以使用 raise 关键字来抛出自定义异常,并使用 rescue 来捕获它。
begin
raise CustomError, "Something went wrong"
rescue CustomError => e
puts "Caught custom error: #{e.message}"
end在这个例子中,raise 抛出了一个 CustomError 异常,并传递了一个自定义的错误消息。rescue 捕获了这个异常,并输出了错误消息。
4. 自定义异常类的扩展
你还可以在自定义异常类中添加额外的方法或属性,以便在捕获异常时获取更多的上下文信息。
// www.javascriptcn.com code example
class CustomError < StandardError
attr_reader :code
def initialize(message = "This is a custom error", code = 500)
super(message)
@code = code
end
end
begin
raise CustomError.new("Something went wrong", 404)
rescue CustomError => e
puts "Caught custom error: #{e.message}, code: #{e.code}"
end在这个例子中,CustomError 类增加了一个 code 属性,用于存储错误代码。在抛出异常时,可以传递错误代码,并在捕获异常时访问它。