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))
您也可以尝试定义一个宏,该宏将自动生成此类闭包类,但这将是一个相当具有挑战性的过程(以下是一些有关宏的链接):