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