2013-11-04 2 views
1

에서 나는 i 값을 보유 할 수있는 _i 변수를하고자하는 다음 코드지역 변수 우우

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

def StartLevel(level): 
    print level 

을 감안할 때,하지만, 다음 반복에 덮어 쓰기에 beeing 없습니다. 어떻게 그럴 수 있습니까?

답변

0

문서에 따르면 클로저에는 문맥에 대한 "읽기 및 쓰기 액세스 권한"이 있습니다. 즉, 클로저가 실행될 때마다 i에 대한 참조를 사용하며 정의 될 때마다 값을 저장하지 않습니다. 언어 서류는 매우 가난 영호 ... 영호 -

나는 폐쇄 내부 값을 저장하는 표준 방법이 없다는 것을 확실하지 않다. 가장 좋은 방법은 일부 개발자에게 직접 요청하는 것입니다 (그 중 일부는 부 그룹 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)) 

또한 자동으로하는 매크로를 정의하려고 할 수

Howerver, 당신은 항상 명시 적으로 호출 클래스를 정의하여 원하는 동작을 얻을 수 있습니다 그러한 클로저 클래스를 생성하지만 다소 어려울 것입니다 (여기 매크로에 대한 링크가 있습니다) :

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