![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| MaXL |
|
||||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
Всем привет. Изучаю Perl, дошёл до замыканий и кое-чего не понял. Думаю кто-нибудь поможет прояснить ситуацию.
Написал небольшой скрипт, использующий замыкания:
он, как и ожидалось выводит 110 220 После чего, исправил функцию genFunc следующим образом:
и получил неожиданный, для себя результат: 110 110 Не могу никак понять, из-за чего появляется такой эффект. Ведь изменил я значение переменной $k уже после определения функции, на которую ссылается $newF У нас уже конешно пять утра, но всё же -------------------- MaXL |
||||
|
|||||
| dva300 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2010 Где: Москва Репутация: -1 Всего: 1 |
работа функции начинается в моент ее вызова.
замыкание - возврат ссылки на функцию. вызов $a->(11) но перед этим копия лексических переменных уже сохроненна с измененным значением переменной $x. --------------------
Участник движения Культура Вождения |
|||
|
||||
| Pfailed |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
$k внутри анонимной подпрограммы ссылается на $k внутри подпрограммы genFunc. Соответственно при вызове анонимной функции это самое $k равно значению $k внутри genFunc.
|
|||
|
||||
| MaXL |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
dva300, Pfailed, спасибо. Значит такое поведение действительно является правильным.
-------------------- MaXL |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |