Rescue может работать без begin
Ruby позволяет перехватывать исключения для всего метода сразу. Это позволяет сделать код чище и проще
>> def my_method_1
>> begin
?> raise Exception.new('test 1')
>> rescue Exception => error
>> puts error.to_s
>> end
>> end
=> :my_method_1
>>
?> my_method_1
test 1
=> nil
То же самое, но короче
def my_method_2
>> raise Exception.new('test 2')
>> rescue Exception => error
>> puts error.to_s
>> end
=> :my_method_2
>>
?> my_method_2
test 2
=> nil]
Перехват разных типов исключений так же работает
>> MyCustomGoodError = Class.new(StandardError)
=> MyCustomGoodError
>>
?> def my_method_3
>> raise MyCustomGoodError.new('test 3')
>> rescue MyCustomGoodError => error
>> puts 'Custom error ' + error.to_s
>> rescue Exception => error
>> puts 'All errors' + error.to_s
>> end
=> :my_method_3
>>
?> my_method_3
Custom error test 3
=> nil
Комментарии