Подтвердить что ты не робот

Класс ошибок исключения 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"

Любые предложения относительно наилучшей практики?

4b9b3361

Ответ 1

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

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

Ответ 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