Каков синтаксис для возврата значения от фазера CATCH из блока, который не является подпрограммой?
sub foo() {
<1 2 3>.map: -> $a {
die 'oops';
CATCH { default { 'foo' } }
}
}
sub bar() {
<1 2 3>.map: -> $a {
die 'oops';
CATCH { default { return 'bar' } }
}
}
say foo(); # (Nil, Nil, Nil)
say bar(); # Attempt to return outside of immediatelly-enclosing Routine (i.e. `return` execution is outside the dynamic scope of the Routine where `return` was used)
изменить: желаемый результат:
say baz(); # (baz baz baz)
Вариант использования - map
ing Seq
с помощью метода, который периодически генерирует исключение, обрабатывая исключение в блоке, переданном в карту, путем возврата значения по умолчанию.
say baz()
вернуть '(baz baz baz)'. Сценарий использования, который я имел в виду, заключался в том, чтобы сопоставить Seq с методом, который может периодически выходить из строя, но ЛОВИТЬ это исключение и сопоставить со значением по умолчанию. - person J Hall   schedule 19.04.2018