netch80: (Default)
[personal profile] netch80

Кто с ходу увидит ошибку?

    for i in range(0,3):                                                    
        test.acct_servers[i].handleAcctRequest = \                          
                lambda p: handleAcctRequest(test, test.acct_servers[i], p)  

Получившие данную шишку на лбу понимают, почему для порождения замыкания надо рисовать отдельную функцию.

UPD[2012-07-05]: от gegmopo4:
... lambda p, i=i: (далее по тексту)
Работает, но я не берусь отправлять такое в общее репо.

Date: 2012-07-04 11:50 am (UTC)
From: [identity profile] w00dy.livejournal.com
я так понимаю в использовании i внутри лямбды и последующем ленивом вычислении данного выражения.

Date: 2012-07-04 12:01 pm (UTC)
From: [identity profile] netch80.livejournal.com
Именно. Но в таком виде оно вначале не ожидается:(

Date: 2012-07-04 12:27 pm (UTC)
From: [identity profile] p1r4nh4.livejournal.com
Оно нигде так не ожидается и в большом количестве языков так работает - питон, руби, луа, го, кого я там еще забыл. Раздражает, конечно.

Date: 2012-07-04 01:02 pm (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Это причина, почему в Java в анонимных классах доступны только финализированные внешние переменные и почему в C++11 у лямбд такой относительно громоздкий синтаксис.

Profile

netch80: (Default)
netch80

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 05:40 pm
Powered by Dreamwidth Studios