Использование встроенных замыканий / делегатов функций в Actionscript - PullRequest
5 голосов
/ 18 октября 2008

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

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

Есть ли уловки их использования? Работают ли они практически так же, как в 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 ]

3 голосов
/ 18 октября 2008

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

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

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

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

2 голосов
/ 28 октября 2008

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

1 голос
/ 18 октября 2008

Я нашел то, что изначально заставило меня НЕ хотеть этого, но я забыл детали:

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

(Это то, что упомянул Митч, поскольку ключевое слово "this" находится вне области видимости)

Так вот, ответ Adobe, однако мне, скорее всего, придется ссылаться на локальные переменные, чем на «this».

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...