ruby - 为什么 rand(variable) 会停止我的 Shoes 程序的执行?

标签 ruby shoes

我是 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/

相关文章:

ruby - 什么时候在鞋子中调用完成事件?

ruby - 用鞋子刷新 ruby 堆栈

ruby - Facebook 桌面应用程序

ruby-on-rails - Rails 5 自定义变形不起作用

ruby-on-rails - 在开发模式下重新加载 Rails 3 初始值设定项

ruby-on-rails - `default_controller_and_action' : missing :controller (ArgumentError) in Ruby 3

ruby-on-rails - 如何获取不包括继承、嵌入、由 rails、getter、setter、验证器 a 和其他生成的模型方法?

ruby - 为什么我在调用 Shoes #'visit' 时会丢失我的实例变量?

ruby - 如何按字母顺序对字符串的字符进行排序?