Klauzula else dotyczy kontynułowania działania bez zakończenia bloku bez zgłoszonego wyjątku. Natomiast polecenie ensure zostaje uruchomione bez względu na to, czy blok zakończy się pomyślnie, czy nie. Przykład:
begin
puts "Hello, world!"
rescue
puts "rescue"
else
puts "else"
ensure
puts "ensure"
end
Ten kod wykonano kolejno Hello, world!, potem else, potem ensure. Mimo iż ensure występuje przed elsem
Else- to w sumie delegacja do innej opcji warunku natomiat samo ensure
aby zapobiec awariom aplikacji po osiągnięciu szczytu stosu wywołań. W Ruby używamy do tego słowa kluczowego rescue.
Ten mechanizm opiera się o tzw. raised exception O CZYM warto poczytać
begin
puts "coś"
2/0
rescue
puts "błąd"
else
puts "sukces"
ensure
puts "to się wykona zawsze"
end
W tym wypadku mówimy: wykonaj else tylko gdy w instrukcji begin kod nie zwróci wyjątku
Przetestuj program - wyrzuć wyjątek w bloku begin w obu przypadkach