我只是把手放在 SHA2017 徽章上。我编写了以下程序并在模拟器中运行它:
import ugfx
import badge
def key_pressed(key, is_pressed):
print('key_pressed(key=%r, is_pressed=%r)' % (key, is_pressed))
badge.init()
ugfx.init()
ugfx.input_init()
for key in [ugfx.JOY_LEFT, ugfx.JOY_UP, ugfx.JOY_RIGHT, ugfx.JOY_DOWN]:
ugfx.input_attach(key, (lambda is_pressed: key_pressed(key, is_pressed)))
# Uncommenting this makes all keystrokes get interpreted as JOY_UP:
# ugfx.input_attach(key, (lambda is_pressed: key_pressed(key, is_pressed)))
# But uncommenting this makes JOY_UP work as intended and doesn't affect other keys
# ugfx.input_attach(ugfx.JOY_UP, (lambda is_pressed: key_pressed(ugfx.JOY_UP, is_pressed)))
while True:
pass
如果我运行它,按下任何键都会说我按下了 JOY_DOWN。取消注释第一行将说明我按下了 JOY_UP,只有取消注释最后一个注释行才会使所有键触发 JOY_DOWN,除了 JOY_UP,它按预期工作。
这是错误还是预期行为?似乎 MicroPython 只编译一次 lambda 并将引用绑定到“key”,这对我来说似乎很奇怪。