2013-11-04 51 views
1

考慮下面的代碼局部變量在噓

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

def StartLevel(level): 
    print level 

我想要_i變量來保存i值,但在接下來的迭代不beeing覆蓋。 我該如何存檔?

回答

0

文檔說閉包對其上下文具有「讀取和寫入權限」。這意味着每次執行時,您的關閉將使用對i的引用,而不是每次定義它時的存儲值。

我不確定沒有標準的方法來保存關閉內的值 - boo語言文檔非常差。你可以做的最好的事情是直接詢問一些開發者(其中一些可以在boo谷歌組中使用)。

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)) 

您也可以嘗試定義一個宏可以自動將

Howerver,你總是可以通過顯式定義可調用的類實現期望的行爲生成這樣的閉包類,但它將是相當具有挑戰性的(這裏有一些關於宏的鏈接):

http://boo.codehaus.org/Syntactic+Macros

https://groups.google.com/forum/#!topic/boolang/9wDEevRUHH8