为什么rand(变量)暂停我的Shoes程序的执行?
我是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)
而没有问题,但是如果我尝试在鞋上做它,它什么也不做。
您有几个错误。首先,使用@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)
,你会很好。
是的,这个解决方案工作。 – Belis 2011-05-18 04:46:37
edit_line
返回一个String对象。您需要先将其转换为整数@sides = edit_line.to_i
它应该是@sides? – AShelly 2011-05-18 01:23:17
+1 @helper:'@total = 1 + rand(sides)'应该是@total = 1 + rand(@sides)' – 2011-05-18 02:30:24