2011-05-18 70 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

相关问题