Boo中lambda块内的局部变量
给定以下代码Boo中lambda块内的局部变量,lambda,boo,Lambda,Boo,给定以下代码 for i in range(10): touchManager.AddButton( {t | _i = i; StartLevel(_i) } ) def StartLevel(level): print level 我希望\u I变量保存I值,但在下一次迭代中不会被覆盖。 我怎样才能做到这一点呢?文档中说闭包对其上下文具有“读写访问权”。这意味着您的闭包在每次执行时都将引用i,而不是在每次定义时都存储值 我不确定在闭包中是否有保存价值的标准方法——boo语言文档非
for i in range(10):
touchManager.AddButton( {t | _i = i; StartLevel(_i) } )
def StartLevel(level):
print level
我希望\u I
变量保存I
值,但在下一次迭代中不会被覆盖。
我怎样才能做到这一点呢?文档中说闭包对其上下文具有“读写访问权”。这意味着您的闭包在每次执行时都将引用
i
,而不是在每次定义时都存储值
我不确定在闭包中是否有保存价值的标准方法——boo语言文档非常糟糕。你能做的最好的事情就是直接询问一些开发者(他们中的一些人可以在boo google group中找到)
然而,通过显式定义可调用类,您始终可以实现所需的行为:
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))
您也可以尝试定义一个宏,该宏将自动生成此类闭包类,但这将是一个相当具有挑战性的过程(以下是一些有关宏的链接):