![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Здравствуйте. Подскажите, пожалуйста.
![]() Есть два класса: //Главный. //Определяю пакет: package src { import flash.display.MovieClip; //Определяю класс: public class Practice extends MovieClip { //Определяю конструктор: public function Practice() { //Определяю локальную переменную с инициаллизатором переменной объектом класса ForWork: var h = ForWork; h(); //Вызываю функцию из функции (у основного класса): h.localWork('из основного класса'); } } } //Определяю пакет: package src { function ForWork() { trace("Эта функция была вызвана!"); //Определяю функцию функции с одним обязательным параметром. function localWork(place) { trace("Подфункция вызвана"); } //Вызываю подфункцию: //Присваиваю в качестве аргумента "место" откуда была вызвана эта функция localWork('из функции!'); } } А как я могу обратиться к функции (локальной функции) функции ForWork? |
|
|||||
|
Поставить модификатор public перед определением локальной функции и обратиться через оператор "."
А вообще странно, проще сделать полноценный класс //Определяю пакет: package src { public class ForWork { public function ForWork() { trace("Конструктор"); } //Определяю функцию функции с одним обязательным параметром. public function localWork(place) { trace("Подфункция вызвана"); } } } И насчет обязательного параметра - в определении надо (для компилятора не критично) писать тип входного параметра |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Цитата:
Добавлено через 2 минуты Цитата:
|
|
|||||
|
Цитата:
На самом деле это анонимная функция (и не важно, что у неё есть имя) Это то же самое, что: var localWork:Function = function (place):void { trace("Подфункция вызвана");// Не подфункция это! } Так что можно не морочить себе голову и забыть про эту функцию как про страшный сон |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
Цитата:
|
|
|||||
|
Цитата:
Цитата:
Но: 1. В этих языках они чаще используются не чтобы обработать что-то асинхронно по месту, а чтобы лаконично завернуть функциональную обработку данных 2. В этих языках есть оптимизации лямбды (например по возможностьи несоздание второго экземпляра лямбды), либо проблемы с лямбдами меркнут на фоне общей тормознутости языка (как в Python) 3. Даже в Python запретили делать анонимки размером больше одного выражения Потому что читабельность падает! Почему анонимки в AS3 плохо: - не первый раз здесь это говорю, но на одном проекте после истребления анонимок потребление памяти упало с 800 до 200 Mб. Вобщем, надо быть _очень_ аккуратным, чтобы ничего не потекло при использовании анонимок - нет никаких оптимизаций - создаются при каждом упоминании, захватывают весь контекст, даже если не надо, не обрабатываются JIT-компилятором - падает производительность - просто доступ к обычным переменным становиться медленнее в разы(!) - читабельность ухудшается. Последний раз редактировалось expl; 06.02.2013 в 21:15. |
|
|||||
|
Регистрация: Aug 2012
Сообщений: 297
|
В таком случае у меня комплилятр ругается на создание модификатора управления доступом внутри функции.
Я сделаю, как вы говорите, но мне интересно, как это (в смысле функция внутри функции) будет выглядеть. Сейчас просто эту тему прохожу у Колина Мука. Добавлено через 37 секунд Цитата:
|
|
|||||
|
Цитата:
Создайте обычный метод класса рядом, не надо его внутрь другого метода пихать Цитата:
Если эти битмапы были в объекте - к объекту можно достучаться и переназначить их на более актуальные, а к захваченному функцией контенту - не достучишься - пока функция нужна - весь неактуальный мусор будет висеть в памяти. А если представить что в одних анонимках, захвативших контекст в добавок создаются другие анонимки - уже захватывается и контекст главной анонимки и контекст ранее её захваченный у нормального метода - получается такое дерево из анонимок. И пока _все_ ссылки на все анонимки этого дерева не похеришь - контексту нормального метода не видать сборщика мусора как своих ушей ![]() Последний раз редактировалось expl; 07.02.2013 в 00:30. |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:49. |
|
|
« Предыдущая тема | Следующая тема » |
|
|