Обсуждение:Замыкание (программирование)
Про примеры
[править код]NB. Перенёс все примеры кроме одного (наиболее «классического») в Викиучебник, где им и место, чтобы здесь не разводить свалку. РоманСузи 16:52, 8 января 2015 (UTC)
А что в этом хорошего
[править код]А что в этом хорошего, почему это круто и зачем это надо ? Как это правильно использовать? Nbr 12:42, 3 декабря 2006 (UTC)
- Пример. Есть функция-итератор, которая, например, обходит дерево и делает над каждой веткой заданную операцию. Эта операция задается путем передачи ее в качестве одного из параметров итератора. (Например, в C# это делается через делегат, в C++ - указатель на функцию и т.д.) Мы хотим, чтобы она поработала (обошла дерево) с нашей операцией из одной-двух строчек. Без замыкания пришлось бы эту операцию описывать где-то в другом месте как обычную функцию, называть её именем и передавать это имя в параметрах итератора. А с замыканием можно наши две строчки написать прямо в месте вызова итератора, что есть гораздо логичнее и читабельнее. --М. Ю. (yms) 14:07, 3 декабря 2006 (UTC)
- Похоже, М. Ю. (yms) описал не преимущества замыканий, а преимущества анонимных функций перед неанонимными. А поддержка языком программирования замыканий просто позволяет обращаться к внешним переменным из функции, передаваемой как объект (когда это нужно). --Bosik GN (обс.) 17:00, 21 февраля 2018 (UTC)
- Хаха, получил привет из 2006 года. Конечно, тот ответ был весьма невнятным, в нем не хватало главного, но замыкание используется именно для функции, определяемой внутри другой функции. --М. Ю. (yms) (обс.) 17:10, 21 февраля 2018 (UTC)
- Похоже, М. Ю. (yms) описал не преимущества замыканий, а преимущества анонимных функций перед неанонимными. А поддержка языком программирования замыканий просто позволяет обращаться к внешним переменным из функции, передаваемой как объект (когда это нужно). --Bosik GN (обс.) 17:00, 21 февраля 2018 (UTC)
О Java
[править код]В Java так же реализовано замыкание классов :)
Про замыкание функций - зачем акцентировать внимание на то, что метод из анонимного класса имеет доступ к переменным с модификатором final? Или он имеет доступ только к этим переменным?
Не научный стиль
[править код]Авторам статьи к изучению Википедия:Правила и указания#Язык и стиль 81.9.62.62 21:08, 12 марта 2009 (UTC)
- Торагой, ну исправили бы! А то Вы только скромно указали нам наше место. 217.77.223.140 22:11, 11 октября 2009 (UTC)
- Как вы представляете исправление тех частей статьи, в которых человек не разбирается? (языки программирования, отличные от тех, которые он знает). Логично, чтобы ненаучный стиль исправили те, кто писал эту статью или же другие знающие люди. --Irker 09:53, 24 октября 2009 (UTC)
Ещё о Java
[править код]1. В приведённом сэмпл-коде есть комментарий:
// Имеет доступ к приватным членам содержащего класса:
Создаётся впечатление, что к остальным полям класса-контейнера нет доступа.
И, у класса в Java - члены или поля? Желательно стандартизовать терминологию, хотя бы в рамках этой статьи.
2. Для анонимного класса Thread реализован метод run(), а вызывается - метод start(). Arcadius 11:29, 8 мая 2010 (UTC)
Все правильно. Используется шаблонный метод. Метод start() уже определен для класса Thread и он вызывает метод run(), который пользователь обязан определить сам. Об этом не стоит вспоминать здесь -это только будет мешать пониманию самой статьи. Кому интересно - разберется сам. Msangel 01:25, 27 декабря 2010 (UTC)
О C++ 0x
[править код]Замыкания будут поддерживаться в новом стандарте C++. Пока утверждён только черновик спецификации, так что синтаксис и требования в окончательной редакции стандарта могут измениться. Стоит ли написать об этом и привести работающие в GCC/MSVS примеры для C++ 0x? cpp 20:08, 16 января 2011 (UTC)
- Существующий пример не является замыканием. К тому же C++11 поддерживает замыкания довольно ограниченно. Внёс в статью. 85.141.173.75 11:01, 27 июня 2012 (UTC)
C++ замыкание с использованием перегрузки оператора: "()"
[править код]struct Inc
{
Inc(int dx = 1){this->dx = dx;}
int operator()(int x){return x + dx;}
private:
int dx;
};
int main(int argc, char* argv[])
{
Inc inc, inc5(5);
cout << inc(4) << endl << inc5(3); // результат: 5 8
cin.get();
return 0;
}
Чем не замыкание?
add(1)(4)(8)(8)
[править код]const res = add(1)(4)(8)(8);
Почему были выбраны именно эти константы? Обязательно ли их использование в примерах? Похоже, что их использовали в других областях и следует придумать другую, менее частную иллюстрацию замыканий. https://en.wikipedia.org/wiki/Fourteen_Words
109.173.10.234 08:42, 19 ноября 2018 (UTC)