Как правило, в методе Ruby возвращается значение последнего выполненного блока, вот так:
def boom
if false
"a"
else
"double a"
end
end
p boom # "double a"
Но когда я создаю такое соединение, которое включает rescue
и ensure
. ensure
- последний блок для выполнения, но возвращается значение из блока rescue
. Почему это происходит?
def a
1.some_weird_method
"Boom"
rescue NoMethodError
p "An Error: " + $!.message
ensure
p "This value must be returned"
end
p "Why do rescue block returns?:" + a
p RUBY_VERSION
вывод:
Finished in 44 ms
"An Error: undefined method `some_weird_method' for 1:Integer"
"This value must be returned"
"Why do rescue block returns?:An Error: undefined method `some_weird_method' for 1:Integer"
"2.4.6"
код можно проверить здесь: https://leetcode.com/playground/2NPL8QgN