Классы ошибок исключения Ruby - PullRequest
33 голосов
/ 01 августа 2010

Вы можете создать подкласс исключения, чтобы сделать его более информативным, но как установить «сообщение» по умолчанию?

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 ]

60 голосов
/ 01 августа 2010

Определите метод инициализации, который принимает сообщение в качестве аргумента со значением по умолчанию.Затем вызовите метод инициализации StandardError с этим сообщением (используя super).

class MyError < StandardError
  def initialize(msg = "You've triggered a MyError")
    super(msg)
  end
end
2 голосов
/ 21 сентября 2015

Вы также можете перезаписать метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...