ещё питоновых грабелек
Jul. 4th, 2012 02:16 pmКто с ходу увидит ошибку?
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: (далее по тексту)
Работает, но я не берусь отправлять такое в общее репо.
no subject
Date: 2012-07-04 12:58 pm (UTC)no subject
Date: 2012-07-04 01:00 pm (UTC)no subject
Date: 2012-07-04 01:04 pm (UTC)no subject
Date: 2012-07-04 01:05 pm (UTC)no subject
Date: 2012-07-04 01:29 pm (UTC)no subject
Date: 2012-07-04 01:31 pm (UTC)Когда пишут фор в си-подобных языках, тоже пишут (i = 0; i < 10; i++), а не i <= 9. Всë ок, так удобно жить.
no subject
Date: 2012-07-04 01:32 pm (UTC)Не знаю, почему.
no subject
Date: 2012-07-04 01:34 pm (UTC)no subject
Date: 2012-07-04 01:50 pm (UTC)no subject
Date: 2012-07-04 01:52 pm (UTC)no subject
Date: 2012-07-04 02:06 pm (UTC)no subject
Date: 2012-07-04 02:23 pm (UTC)Если мы начинаем с 0, то индекс меньше длины. А если с 1, то меньше или равен - и начинают вылезать ошибки на 1 в разных местах. :(
Я когда-то видел статью, написанную внятнее, чем у Дейкстры, но в целом сначала думаешь "а что, прикольно", а потом все эти ошибки на 1 когда вылезут - становится совсем невесело.
Это надо сказать, что в Луа с ними проще, чем там в жс или в си - есть итераторы типа pairs/ipairs, которые вернут что надо, иначе бы циклы довольно стрëмно выглядели.
no subject
Date: 2012-07-05 08:27 am (UTC)no subject
Date: 2012-07-04 07:28 pm (UTC)[a,a) ==> empty
[a,b) [b,c) ==> [a,c)
[a,b) [c, d) ==> [b, c)
(следствие) [a,b) [b,c) ==> empty
(следствие) a <= b <= c ==> [a,c) = [a, b) [b, c), при этом <= в левой части существенно.
С открытыми и закрытыми появляются граничные случаи в количествах.
no subject
Date: 2012-07-04 07:30 pm (UTC)[a,b) union [b,c) => [a,c)
[a,b) intersect [c,d) => [b,c)
[a,b) intersect [b,c) => empty
a <= b <= c ==> [a, c) = [a,b) union [b,c)
no subject
Date: 2012-07-04 01:13 pm (UTC)let lambas = [];
for (let i = 0; i < 10; i++) {
lambdas.push(function() { console.log(i); });
}
Это будет работать как хочется.