Ruby的异常错误类

时间:2010-08-01 16:52:39

标签: ruby

您可以创建例外的子类以使其更具描述性,但您应该如何设置默认的“消息”?

class MyError < StandardError
  # default message = "You've triggered a MyError"
end

begin
  raise MyError, "A custom message"
rescue Exception => e
  p e.message
end

begin
  raise MyError
raise Exception => e
  p e.message
end

第一个应该输出'自定义消息'

第二个应该输出'你已经触发了一个MyError'

有关最佳做法的建议吗?

2 个答案:

答案 0 :(得分:60)

定义一个initialize方法,该方法将消息作为带有默认值的参数。然后使用该消息调用StandardError的初始化方法(使用super)。

class MyError < StandardError
  def initialize(msg = "You've triggered a MyError")
    super(msg)
  end
end

答案 1 :(得分:2)

您也可以覆盖子类中的message方法并返回您想要显示的字符串。我更喜欢这个,因为如果你想在显示信息之前做任何有趣的事情,它似乎会让事情变得更清晰。

class CustomError < StandardError

  def initialize(error_code, error_info)
    @code, @info = error_code, error_info
  end

  def message
    "<Code: #{@code}> <Info: #{@info}>"
  end

end