我是 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 中这样做,它什么也不做。
最佳答案
你有几个错误。首先,使用@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)
即可做个好人。
关于ruby - 为什么 rand(variable) 会停止我的 Shoes 程序的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038773/