Ruby不识别时间方法

时间:2014-02-18 21:06:25

标签: ruby

我写了一个程序来模拟多面体骰子的滚动,但每次运行它都会得到如下所示的错误。它显示我的提示并让我输入我的数字,但之后它会搞砸了。我一直试图在网上找到一个修复但我只发现人们在讨论times方法未定义的不同问题。我是Ruby的新手,所以任何帮助都会受到赞赏。

我的计划:

p = 0
while p < 1
puts "Choose your die type"
die_type = gets.chomp

puts "Choose your number of die"
die_number = gets.chomp

total = 0
i = 1

die_number.times do
  random_int = 1 + rand(die_type)
  total += random_int
  i += 1
end
puts total
end

我得到的错误:

/dieroll.rb:13: undefined method 'times' for "5":String (NoMethodError)

1 个答案:

答案 0 :(得分:2)

die_number = gets.chomp更改为die_number = gets.to_idie_number = gets.chomp,为本地变量die_number指定一个字符串(因为Kernel#gets为我们提供了一个字符串对象)。 String没有任何名为#times的方法,而Fixnum类具有该方法。

die_type = gets.chomp更改为die_type = gets.to_i,以避免等待您的下一个错误,一旦您修复第一个错误。

1.respond_to?(:times) # => true
"1".respond_to?(:times) # => false

在您的情况下,die_number"5",因此您的尝试"5".times将错误提升为未定义的方法'次'为“5”:字符串(NoMethodError)