Странная ошибка в моей программе, которую я не знаю, как объяснить - PullRequest
2 голосов
/ 29 января 2012

Я пишу простой менеджер буфера обмена в wxpython для забавы и прибыли, и я наткнулся на странную ошибку, которая вызывает вызов одной и той же функции независимо от того, по какому пункту меню щелкнули.код здесь и проблема связана со строками 49-56 (элемент «Очистить» работает отлично) - он всегда вызывает последнюю созданную функцию.

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

Я застрял, если смогу 'не выбирайте пункты меню, поэтому я буду признателен всем и за любую помощь.

1 Ответ

2 голосов
/ 29 января 2012

Значение i ищется во включающей области действия CreateHistoryMenu. Когда вызывается func, i равно последнему значению в цикле. Вот почему все пункты меню вызывают последнюю созданную функцию.

Если вы добавите i к аргументам lambda со значением по умолчанию, i станет локальной переменной в самом lambda со значением по умолчанию, которое было связано в то время, когда лямбда была определены. Это будет правильное значение для i:

        func = lambda e, i = i: self.ChooseItem(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...