给定以下代码
for i in range(10):
touchManager.AddButton( {t | _i = i; StartLevel(_i) } )
def StartLevel(level):
print level
我希望_i
变量保存i
值,但不会在下一次迭代中被覆盖。我怎样才能实现呢?
文档说闭包对其上下文具有"读写访问权限"。这意味着您的闭包将在每次执行时都使用对i
的引用,而不是在每次定义时都存储值。
我不确定没有标准的方法可以在闭包中保存值 - boo 语言文档非常差。你能做的最好的事情就是直接询问一些开发人员(其中一些可以在boo google组中找到)。
Howerver,您始终可以通过显式定义可调用类来实现所需的行为:
class MyClosure(ICallable):
i as int
def constructor(i as int):
self.i=i;
def Call(o as (object)):
StartLevel(i)
然后像这样使用它:
for i in range(10):
touchManager.AddButton( MyClosure(i))
您也可以尝试定义一个宏,该宏将自动生成此类闭包类,但这将是相当具有挑战性的(这里有一些关于宏的链接):
http://boo.codehaus.org/Syntactic+Macros
https://groups.google.com/forum/#!topic/boolang/9wDEevRUHH8