为什么rand(变量)会暂停我的Shoes程序的执行?

时间:2011-05-18 00:55:18

标签: ruby 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(sides)替换@total = rand(20),程序执行得很好,但当然只生成1-20的随机数。

我尝试了像rand(@sides)这样的变体,但无济于事。

我在简单的Ruby中设计了一个类似的程序,它使用rand(sides)没有问题,但如果我尝试在Shoes中执行它,它什么都不做。

2 个答案:

答案 0 :(得分: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),你会很好。

答案 1 :(得分:0)

edit_line返回一个String对象。您需要先使用@sides = edit_line.to_i

将其转换为整数