2011-05-18 73 views
2

我是Shoes的新品牌,我正在嘗試創建一個簡單的骰子滾輪,允許用戶通過輸入側面數量來選擇自定義尺寸的模具。我的代碼如下:爲什麼rand(變量)暫停我的Shoes程序的執行?

Shoes.app :width => 500, :height => 300 do 
flow do 
    para "Sides: " 
    @sides = edit_line 
end 
flow do 
    button "Roll!" do 
    @total = 1 + rand(sides) 
    alert @total 
    end 
end 
end 

我在編輯行中輸入一個數字,點擊按鈕,沒有任何反應。

如果我用@total = rand(20)代替@total = rand(sides),程序執行得很好,但是當然只產生1-20的隨機數。

我嘗試了像rand(@sides)這樣的變化,無濟於事。

我設計了一個類似的程序,只是在普通的Ruby中使用rand(sides)而沒有問題,但是如果我嘗試在鞋上做它,它什麼也不做。

+1

它應該是@sides? – AShelly 2011-05-18 01:23:17

+0

+1 @helper:'@total = 1 + rand(sides)'應該是@total = 1 + rand(@sides)' – 2011-05-18 02:30:24

回答

1

您有幾個錯誤。首先,使用@sides,而不是sides。這樣,你引用了你之前設置的相同變量。

二,@sides的類型爲Shoes::EditLine。這很好,因爲你需要動態查找文本。當您想要@sides的文本時,請致電@sides.text,它返回String。當然,在這種情況下,您需要將其轉換爲適合輸入到rand的整數,因此您將使用@sides.text.to_i

(當然,標準的告誡:鴕鳥政策信任用戶。在現實中,你要檢查您輸入無效輸入,並做一些有用的東西。)

長話短說,更換@total = 1 + rand(sides)@total = 1 + rand(@sides.text.to_i),你會很好。

+0

是的,這個解決方案工作。 – Belis 2011-05-18 04:46:37

0

edit_line返回一個String對象。您需要先將其轉換爲整數@sides = edit_line.to_i

相關問題