О типах исключений.
Запись от dimarik размещена 23.04.2014 в 00:26
Ну как обычно, просто, чтобы не забыть куда постил.
Цитата:
Синхронные исключения... Ах, давай с начала и по порядку!
Начнем, пожалуй.
Привет! Нужно сразу же научиться отличать ошибки от исключений (exceptions).
Ошибки бывают у всех, даже если ты (вдруг, уже) не женат.
Скорее всего сейчас под "ошибкой" ты подразумеваешь исключение (exceptions, еще раз).
Теперь, когда ошибки стали для нас исключениями, давай рассмотрим их типы. Исключения бывают двух типов: синхронные и асинхронные.
1. СИНХРОННЫЕ.
Синхронные выпадают нам через внутренние механизмы флеша (рантайма, adobe flasplayer(c) или adobe air(c)) или через инструкцию throw.
Внутренние механизмы скорее всего обычно выбрасывают исключения типа (подкласса) Error. То есть что мы можем словить в catch(value:Object), где в качестве Object можно указать заинтересованный в "кэтче" тип объекта, который сгенерит throw. Для справки, можно указывать несколько типов для нескольких catch.
Для справки EOFError.
try { var o:Object = ba.readObject(); } catch (error:EOFError) { // trace("Плохой формат у ba, не соответствует AMF3, бро"); } catch (error:TypeError) { // Обычный Error #1009 // trace("Нулевой ba, bro"); }
throw new Error("Непредсказуемая ошипка!"); throw "Ошибся в жизни, выбрав флеш!"; throw Sprite; throw throw; //прокатит?
Асинхронные исключения флешом генерируются во время асинхронных операций, а по сути инициируются при помощи диспатча объектов подкласса ErrorEvent (это важно, они такие особенные).
Тут нужно упомянуть, что асинхронное исключение ловится только добавлением соответствующего слушателя на литерал ErrorEvent события.
там, "внутри рантайма" происходит примерно следующее:
if (event is ErrorEvent) { if ( !this.hasEventListener(event.type) ) { throw event; // происходит неявное преобразование event -> event.toString(); могу ошибаться с конкретикой чего там throw; } }
Ваш объект генерит события типа ErrorEvent. Все вспоминаем, что литералом или "типом" (я не зря употребил двойные кавычки, чтобы отличать от типа именно объекта ErrorEvent) события во флеше является строка, например, "complete" в константе flash.events.Event.COMPLETE. Предположим, что таким "типом" события является строка "rampageBro". Итак, наш генерируемый объект выглядит так:
Применение
Вот сделайте диспатч new ErrorEvent("rampageBro") и не словите его (ни один хендлер не будет подписан к этому "типу" события). Примите исключение. По вышеописанной процедуре.
Всего комментариев 8
Комментарии
![]() ![]() |
|
Вы забыли упомянуть про глобальный обработчик для всех ошибок, добавленный с какого-то там 10.x плеера.
|
![]() ![]() |
|
Вы, наверное, про UncaughtErrorEvents.
(Версии среды выполнения: Flash Player 10.1, AIR 2) А за статейку спасибо. Сам не пробовал никогда ErrorEvent кидать. |
![]() ![]() |
|
Классное чтиво ) читал с улыбкой на лице, отличный юмор!
|
![]() ![]() |
|
Вот это для меня откровение:
по сути имеем некое подобие перегруженных функций исходя из типа аргументов. |
![]() ![]() |
|
Котяра, это не перегрузка ) это синтаксический сахар для if (a is b).
|
![]() ![]() |
|
Цитата:
по сути имеем некое подобие перегруженных функций исходя из типа аргументов.
|
![]() ![]() |
|
Цитата:
Котяра, это не перегрузка ) это синтаксический сахар для if (a is b).
а сахар скорее над switch (type) / case |
![]() ![]() |
|
Ну, по мне switch/case всегда был сахаром для if/else
![]() |
Последние записи от dimarik
- Memory allocation на Vector.<IInterface> (07.05.2015)
- [Starling] Тормози меня плавно! (28.10.2014)
- [Starling идиотизмы] Об интерактивных событиях (02.10.2014)
- О типах исключений. (23.04.2014)
- Немного о Vector и ByteArray (28.03.2014)