在Ruby中将用户输入转换为数组中的整数?

时间:2017-05-03 01:04:29

标签: arrays ruby methods refactoring

我希望用户的输入成为一个整数,它是新数组中的[0]索引,我想在以后添加更多项目。有没有办法将用户的输入转换为数组而不将其更改为整数并推送它?这是我目前的代码:

guesses = []
puts "Guess what number I'm thinking of. It's between 1 and #{solution_range}"
guess = gets.to_i
guesses.push(guess)

1 个答案:

答案 0 :(得分:1)

使用严格投射

将输入转换为Integer,因为Kernel#gets总是返回String或nil。作为单行执行此操作的一种方法是为变量分配空哈希,然后将强制转换附加到哈希。这可能比你目前的方法更快,但我还没有真正对它进行基准测试。

例如,如果您在提示符下输入1,则会收到:

print 'Enter integer: '
guesses = [] << Integer(gets)
#=> [1]

这种方法的一个很好的副作用是,如果你不能用Kernel#Integer转换整数,你将得到一个适当的例外。例如:

  

输入integer:foo
  ArgumentError:Integer()的值无效:&#34; foo \ n&#34;

当您需要严格演员

时,请避免字符串#to_i

使用String#to_i并不总能达到您的预期效果。假设您在提示符处输入foo,请考虑以下内容:

print 'Enter integer: '
guesses = [] << gets.to_i
#=> [0]

因为String#to_i对于强制转换比对内核#Integer更宽松,所以任何非整数响应(包括nil)都将转换为0。有时这可能是您想要的,但对于您发布的用例,这可能不太可取。