2008-10-17 17 views
5

Dlaczego zamknięcia inline są tak rzadko używane w Actionscript? Są bardzo potężne i myślę, że są całkiem czytelne. Prawie nigdy nie widzę, żeby ktoś ich używał, więc może po prostu patrzę na zły kod. Google używa ich w swoich interfejsach API Map Google do pobierania próbek Flasha, ale uważam, że to jedyne miejsce, w którym je widziałem.Użycie zamkniętych wstawek/funkcji w Actionscript

Preferuję je, ponieważ masz dostęp do zmiennych lokalnych w zakresie, który je definiuje, a logika utrzymuje się w jednej metodzie i nie kończy się na mnóstwie funkcji, dla których trzeba wymyślić nazwę.

Czy są jakieś przypadki ich użycia? Czy działają one prawie tak samo, jak w C#.

Dopiero co odkryłem, że AS3 je obsługuje i jestem dość zirytowany, ponieważ uważałem, że przeczytałem, że zostały one wycofane w AS #. Więc wróciłem do korzystania z nich!

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++); 
}); 

Odpowiedz

3

Największym problemem, na który należy zwrócić uwagę, jest to, że często "ten" nie jest zdefiniowany w zamkniętym miejscu. Czasami możesz ustawić "to", ale nie zawsze jest to właściwe "to", które możesz ustawić, zależnie od tego, jak je używasz.

Ale powiedziałbym, że większość kodu Flex, nad którym pracowałem, ma wbudowane wewnętrzne kodowanie w całym kodzie - ponieważ wywołania zwrotne są jedynym sposobem na wykonanie pracy, a często nie trzeba go wydobywać. cała oddzielna funkcja.

Czasami, gdy zagnieżdżona funkcja staje się zbyt duża, podzielę ją nieznacznie za pomocą zmiennych funkcji w funkcji; pomaga mi to trochę uporządkować, nadając etykiety funkcjom, ale zachowując niektóre charakterystyczne cechy zamkniętych linii (na przykład dostęp do zmiennych lokalnych).

Mam nadzieję, że to pomoże.

1

znalazłem co początkowo mnie nie chce, aby to zrobić, ale zapomniał szczegóły:

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

(To właśnie wspomniane Mitch - jeśli chodzi o „to” słowo kluczowe jest poza zakres)

To odpowiedź Adobe, ale bardziej prawdopodobne jest, że muszę odwoływać się do zmiennych lokalnych niż "to".

Jak inni interpretują zalecenie Adobe?

2

Dodatkowym problemem jest to, że zbieranie śmieci jest zepsute, jeśli chodzi o zamknięcia (przynajmniej w wersji Flash 9). Pierwszy przypadek danego zamknięcia (z leksykalnego punktu widzenia) nigdy nie będzie zbiorem śmieci - wraz z czymkolwiek innym, do którego odnosi się zamknięcie w łańcuchu zasięgu.