2008-10-17 4 views
5

Почему встроенные закрытия, редко используемые в ActionScript? Они очень мощные и я считаю вполне читаемыми. Я почти никогда не вижу, чтобы кто-нибудь их использовал, поэтому, возможно, я просто смотрю на неправильный код. Google использует их в своих образцах API Карт Google для Flash, но я думаю, что это единственное место, где я их видел.Использование встроенных закрытий/функций делегатов в Actionscript

Я пользуюсь им, потому что у вас есть доступ к локальным переменным в области, которая их определяет, и вы держите логику в одном методе и не получаете множество функций, для которых вам нужно придумать имя.

Есть ли уловки их использования? Они работают практически так же, как на C#.

Я на самом деле только что обнаружил, что AS3 поддерживает их, и я очень раздражен, потому что думал, что прочитал, что они устарели в AS #. Поэтому я вернусь к их использованию!

private function showPanel(index:int):void {  

_timer = new Timer(1000, 1);   
_timer.addEventListener(TimerEvent.TIMER, function(event:Event):void 
{ 
    // show the next panel 
    showPanel(index++); 
}); 

ответ

3

Самый большой вопрос, на который нужно обратить внимание, заключается в том, что часто это «не» определено во встроенном закрытии. Иногда вы можете установить «это», но не всегда это «правильно», что вы могли бы установить, в зависимости от того, как вы их используете.

Но я бы сказал, что большая часть кода Flex, над которым я работал, постоянно расширялась в течение всего цикла, поскольку обратные вызовы - это единственный способ получить работу, и часто вам не нужно выявлять целая отдельная функция.

Иногда, когда функция вложенная становится слишком большой, я немного разломаю ее с функциональными переменными в функции; это помогает мне организовывать бит, предоставляя метки функциям, но сохраняя некоторые характеристики встроенных замыканий (например, доступ к локальным переменным).

Надеюсь, это поможет.

1

Я нашел то, что изначально меня не хотите делать это, но я уже забыл детали:

http://livedocs.adobe.com/flex/3/html/16_Event_handling_6.html#119539

(Это то, что упомянуто Митч - насколько «это» ключевое слово быть из scope)

Так что ответ Adobe, однако, мне гораздо больше нужно будет ссылаться на локальные переменные, чем на «это».

Как другие интерпретируют рекомендацию Adobe?

2

Еще одна проблема заключается в том, что сбор мусора разрушается, когда дело доходит до закрытия (по крайней мере, во Flash 9). Первый экземпляр данного закрытия (с лексической точки зрения) никогда не будет собираться с мусором - вместе с чем-либо еще, на который ссылается замыкание в цепочке видимости.

Смежные вопросы