Класс ошибок исключения 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"
Любые предложения относительно наилучшей практики?
Ответы
Ответ 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