2011-04-06 3 views
2

말을 개체. 새로운 버튼 중 하나를 클릭하면 번호가 표시되도록 코드를 작성할 수 있습니까? self 항상 앱 정보 저장 내가 응용 프로그램의 다음과 같은 종류가

button ("#{@i += 1}") {alert @i} 

다음 어떤 버튼을 클릭하기 때문에, 작동하지 않습니다 명백한 접근 방식을 가리키는 때문에 단지 @i의 현재 값을 표시합니다.

+0

'button' 메서드는 버튼의 인스턴스를 반환합니까? 그렇다면 생성 된 정수를 버튼에 인스턴스 변수로 지정할 수 있습니다. – sawa

+0

잠재적으로 작동 할 수는 있지만 그렇게하려는 분명한 방법은 버튼이 아닌 앱의 인스턴스 변수를 만드는 것입니다. – Max

답변

1
Shoes.app do 
    @i = 0 

    def add_button 
     n = @i+1 
     button ("#{@i += 1}") {alert n} 
    end 

    button("0") {add_button} 
end 
+0

매우 이상합니다. 그러나 그것은 작동합니다! 그래도 해커 같아. – Max

+0

그 이유는'n'은 지역 변수이고 Ruby의 블록은 클로저입니다. 'add_button' 메쏘드를 호출 할 때마다 새로운 지역 변수 인'n'이 생성됩니다 만,'button'에 건네지는 블록이 닫히고 그 참조를 유지하기 때문에 메소드가 끝난 후에 변수는 사라지지 않습니다. – Phrogz

관련 문제