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
Комментарии