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 02:23 pm (UTC)
From: [identity profile] p1r4nh4.livejournal.com
Хотя бы потому, что ломается то, о чëм рассказывал Дейкстра: http://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

Если мы начинаем с 0, то индекс меньше длины. А если с 1, то меньше или равен - и начинают вылезать ошибки на 1 в разных местах. :(

Я когда-то видел статью, написанную внятнее, чем у Дейкстры, но в целом сначала думаешь "а что, прикольно", а потом все эти ошибки на 1 когда вылезут - становится совсем невесело.

Это надо сказать, что в Луа с ними проще, чем там в жс или в си - есть итераторы типа pairs/ipairs, которые вернут что надо, иначе бы циклы довольно стрëмно выглядели.

Date: 2012-07-05 08:27 am (UTC)
ext_605364: geg MOPO4 (Default)
From: [identity profile] gegmopo4.livejournal.com
Не пойму, что там у Дейкстры ломается, кроме привычки.

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 02:18 pm
Powered by Dreamwidth Studios