2011-04-06 62 views
2

說我有以下類型的應用程序:在棧/流存儲信息的對象

Shoes.app do 
    @i = 0 

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

    button("0") {add_button} 
end 

,這樣每次單擊該按鈕將其添加具有較高數量的一個新的按鈕。有什麼方法可以編碼它,以便點擊其中一個新按鈕來顯示其編號?由於self總是指向應用,明顯的方法

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

不工作,從此點擊任意按鈕只顯示的@i當前值。

+0

'button'方法返回一個按鈕的實例嗎?如果是這樣,那麼可以在創建實例變量時將該整數指定給該按鈕。 – sawa 2011-04-06 21:10:46

+0

這可能會工作,但嘗試這樣做的顯而易見的方式會爲應用程序創建實例變量,而不是按鈕。 – Max 2011-04-06 22:14:36

回答

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 2011-04-06 22:12:34

+0

它工作的原因是'n'是一個局部變量,Ruby中的塊是閉包。每次調用'add_button'方法都會創建一個新的本地'n'變量,但是該方法完成後該變量不會消失,因爲傳遞給'button「的塊關閉並保留其引用。 – Phrogz 2011-04-06 22:20:25