Ссылка на оригинал статьи тут
Haxe позволяет обрабатывать исключительные ситуации используя синтаксис try/catch.
1 2 3 |
try try-expr catch(имя переменной1:Тип1) catch выражение 1 catch(имя переменной2:Тип2) catch выражение 2 |
Если во время работы try-выражения выполняется throw , то генерируется исключительная ситуация, которая может быть обработана любым последующим catch блоком. Эти блоки состоят из
- имени переменной которая содержится во вброшенном значении,
- подробной аннотации типа которая определяет для каких типов значений генерировать исключительные ситуации,
- выражение которое будет исполняться в этом случае
Haxe позволяет сгенерировать исключительную ситуацию (throw) и обработать (catch) любой тип значения. Он не ограничен типами, наследованными от класса exception или класса error. Блоки catch проверяются сверху вниз, с первого чей тип поддерживается или чье вброшенное значение будет обработано.
Этот процесс имеет много общего с поведением унификации во время компиляции. ( ссылка).
Однако, поскольку проверка должна быть выполнена во время выполнения, существует несколько ограничений:
- Тип должен существовать в момент выполнения (runtime): Class instances, enum instances, abstract core types и Dynamic.
- Параметры типа могут быть только Dynamic.
Тип Dynamic может обрабатывать любое исключение.
Пример моего кода
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Test { static function main() { try { var a = 9; throw "Error";//обработано будет первое (throw) исключение первым обработчиком(catch) throw a; } catch(e:String) { //обработка строки Error trace(e); } catch(b:Dynamic) { trace(b); } } |