![]() |
Вложенные и анонимные функции.
Хочу разобраться как работает GC с вложенными и анонимными функциями.
Например, вот в этот листинг http://pastie.org/780300 демонстрирует, как анонимная функция просто подвисает в памяти. Вообще, удаляются ли анонимные функции из памяти? А вложенные? |
Этот пример не демонстрирует того, что функция "подвисает в памяти".
GC съест их по-любому, если не останется ни одной ссылки на эти функции (хочется верить в GC). В этом примере показывается, что при создании функции, в которой используются локальные переменные текущей области видимости (даже не текущей, а той области видимости, из которой потом не должно быть видно этих переменных), локальные переменные становятся как бы глобальными переменными для этой функции - сумбурно описал, еще это называется "замыкание". Замыкание нередко используется в языка программирования JavaScript, perl... в ActioScript из-за "кривой" реализации "замыканиев", везде советуют не пользоваться данным методом. |
terbooter, а сам проверял? Попробуй, может они уничтожаться как локальные переменные.
|
Я конечно понимаю, что истина дороже, но дались вам эти анонимные функции? Во ФД Ctrl+Shift+1 и нет проблем. Лучше читаемость кода, лучше масштабируемость, лучше типизация. ЗАЧЕМ?
|
А разве Блуд не рассказывал про анонимные функции? Кто-то еще не понял?
|
А разве в поиске мало тех тем, где люди спрашивают про анонимные функции?
|
Цитата:
Я давно хочу изучить вопрос об анонимных функциях как параметр, например, в Array#filter, т.к. для тестов пользуюсь. Достаточно удобно, будет здорово, если безболезненно такое можно пускать в продакшн. |
Цитата:
|
Пришлось разбирать код на javaScript..
ребята - это упитанный пушистый белый, но не заяц. ненавижу js и php - это хуже чем код в кадрах. PS. А анонимные функции - зло, как и php c js Мне нужно было отловить событие window.onLoad и добавить свои обработчики. короче - я сделал свою реализацию событий, потом её применил.. в итоге - смотрите в подписи |
Согласен, анонимные функции зло злейшее. (JS - да, тоже не люблю, но ПХП не так уж плох)
Термин замыкание избегаю сознательно, чтобы не вводить путаницу. Просто сейчас я работаю в большом проекте и у меня нет выбора, кроме как полностью разобраться с замыканиями. |
Цитата:
Цитата:
P.P.S. анонимная функция, присвоенная полю класса продолжает относится к анонимным? |
Цитата:
|
[offtop]
Классно - мы вчера подключили кеширование векторной анимации и подняли потребляемую память с 50 до 400 мб =) [/offtop] А вообще я себе это позволяю только на тестах да и то редко, ибо область видимости и все такое... |
Код:
grep -rPn '(?<!public|private|protected|internal|static|override)\sfunction' .(Можно сделать поправки на кастомные немспейсы, если такковые имелись). |
wvxvw, что это было?
|
Поиск во всех файлах текущей директории текста содержащего регулярное выражение ^. Или вы про общественно-полезные работы? Это как в "Операция Ы".
|
Что-то типа регулярки, если встретилось function, но без модификаторов, доступных только методу?)
Ай-ай, опередил. Короче, поиск замыканий. |
wvxvw, нет не про работы конечно :) Я так понимаю, любимый Lisp?
|
Да нет, это как-бы программа существовавшая еще с эпохи неолита на всех -никс платформах :) В Виндовсе есть какой-то ее аналог, а возможно, что в pwershell так и называется.
|
@TanaTiX, вам сюда
|
BlooDHounD, ну спасибо, в ламеры записали.
|
wvxvw, ох суровые тарифы на наказание.
В текущем проекте на 100 модификаторов public приходится один private. Кастомных нэймспейсов нет =) При таком подходе, даже внуки получат пожизненно Добавлено через 10 минут Вообщем мое мнение по вопросу анонимных функций во флеше такое: низачто и никогда! Тк они нужны для эмуляции ОО подхода при функциональном стиле программирования. Единственный плюс от использования - код немного компактнее, но его труднее читать. Многое еще зависит от типа мышления человека. Кому-то просто нравится ruby, как раз за блоки кода и безумные конструкции которые можно наворотить в 10 строчках. |
"Кстати о птичках..." если уж мы говорим об ОО подходе в функциональных языках, CLOS - это как бы обрзец... и там нету никаких анонимных функций, как раз наоборот. Вообще-то, на сколько я понимаю, анонимные функции должны были выполнять, по задумке автора, то же, что и лямбда в ФП. Но есть нюанс... лямбда, по определению контекстно независимая, а задача объектов, как раз наоборот, поместить методы в свой контекст. А если говорить о реализации ОО в AS3, то вообще анонимные функции противопоказаны, и в языке есть другие инстументы для реализации тех же вещей...
Т.е. эквивалентом Код AS3:
Код:
(deflcass Foo () ((someMethod :accessor someMethod))) |
Немного не то имел ввиду.
Я хотел сказать, что вложенная функция это "как-бы" свойство, "как-бы" объекта. Где "как-бы" объект является методом всего лишь, настоящего (инстанс класса) объекта. Попытка нагромоздить микроархитектуру ОО подобную. Фрактал, блин, такой. Встречал статью про замыкания в as3, где высказывалась похожее сравнение. |
Не знаю... если чесно то функциональные языки тут притянуты за уши... просто потому, что модно. В функциональных языках this не имеет смысла, нету переменных (разрушающего присваивания) ну и т.п. И это просто на стколько далеко от реалий AS3 / JavaScript, что остается только пожимать плечами, когда кто-то берется срванивать :) Ну ни разу не похоже. Т.е. методы в ФП отличаются от не-методов тем, что принимают первым параметром функции объект определенного класса, а классы - это просто списки методов ассоциируемых с ними.
|
А есть факты того что с использованием анонимных функций код может исполнятся не верно или не так как задумано?
|
@Bgg, есть факты того, что с использованием анонимных функций, код всегда исполняется верно, но возможно не так как задумано.
|
| Часовой пояс GMT +4, время: 10:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.