Согласно Языку программирования Ruby стр.164.
Если оператор begin
не распространяет исключение, то значение
оператора значение последнего выражения , оцененное в
предложения begin
, rescue
или else
.
Но я обнаружил, что это поведение согласуется с начальным блоком вместе с оператором else и обеспечивает предложение .
Вот пример кода:
def fact (n)
raise "bad argument" if n.to_i < 1
end
value = begin
fact (1)
rescue RuntimeError => e
p e.message
else
p "I am in the else statement"
ensure
p "I will be always executed"
p "The END of begin block"
end
p value
Вывод:
"I am in the else statement"
"I will be always executed"
"The END of begin block"
"I am in the else statement"
[Finished]
value
оценивается как условие else . Это противоречивое поведение, поскольку обеспечивает предложение - последний выполненный оператор.
Может ли кто-нибудь объяснить, что происходит в начале блока?