Boo中lambda块内的局部变量

时间:2013-11-04 18:13:00

标签: lambda boo

给出以下代码

for i in range(10):
  touchManager.AddButton( {t | _i = i; StartLevel(_i) } )

def StartLevel(level):
  print level

我希望_i变量保存i值,但不会在下一次迭代中覆盖。 我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

文档说封闭对其上下文具有“读写访问权限”。这意味着每次执行时,闭包将使用i的引用,而不是每次定义时都存储值。

我不确定没有标准方法可以在关闭内保存价值 - boo语言文档非常糟糕。你可以做的最好的事情就是直接询问一些开发人员(其中一些是boo google组中的。)

然后,您可以通过显式定义可调用类来实现所需的行为:

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