По сути, вам нужно проверить, соответствует ли предоставленный аргумент критериям, и если да, - сделать то, что должен делать метод, в противном случае вызовите исключение:
class EventInt
def initialize(x)
if x.is_a?(Integer) && x.even?
@x = x
else
raise 'Argument should be an even integer'
end
end
end
EventInt.new(1)
#=> RuntimeError: Argument should be an even integer
EventInt.new(1.1)
#=> RuntimeError: Argument should be an even integer
EventInt.new(1.2)
#=> RuntimeError: Argument should be an even integer
EventInt.new(2)
#=> #<A:0x00007fca4c9a0498 @even_int=2>
На самом деле, было бы больше смысла возвращатьконкретная ошибка, а именно ArgumentError
:
raise ArgumentError, 'Argument should be an even integer'
Или, если вы хотите иметь свой собственный класс ошибок, вы можете сделать следующее:
NotEvenIntegerArgumentError = Class.new(ArgumentError)
и затем в initialize
:
raise NotEvenIntegerArgumentError, 'Argument should be an even integer'
Или, если хотите, вы можете настроить сообщение об исключении по умолчанию в своем классе исключений.Весь код будет выглядеть следующим образом
class EventInt
NotEvenIntegerArgumentError = Class.new(ArgumentError) do
def message
'Argument should be an even integer'
end
end
def initialize(x)
if x.is_a?(Integer) && x.even?
@x = x
else
raise NotEvenIntegerArgumentError
end
end
end