Операторы
scope
позволяют запускать код при выходе из области, в которой вы их объявляете. scope(success)
запускается при нормальном выходе из области. scope(failure)
запускается при выходе из области действия из-за создаваемого исключения. scope(exit)
запускается при выходе из области независимо от того, как вы выходите из области. Ни один из них не дает вам доступа к любым исключениям. Они просто позволяют запускать код при выходе из текущей области в зависимости от того, как вы выходите из этой области.
Таким образом, в сущности, в случаях, когда вы поймаете исключение, сделаете что-то, а затем бросите его снова, не обращая внимания на то, каким на самом деле было исключение, вместо catch
можно использовать scope(failure)
, а scope(exit)
используется вместо finally
. Однако, если вам действительно нужно исключение, вам придется его перехватить, используя блок try
- catch
. scope
просто не дает вам доступа к исключению, поэтому вы не можете использовать оператор scope
, если вы действительно хотите что-то сделать с исключением, которое было сгенерировано. Тем не менее, scope
прекрасно работает, когда вам все равно, что на самом деле было исключение.